[Messenger] Fix error message on undefined message class for non-subscriber handler
This commit is contained in:
parent
abc4ef2566
commit
e5ea3bc032
@ -21,7 +21,6 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\Messenger\Handler\ChainHandler;
|
||||
use Symfony\Component\Messenger\Handler\Locator\ContainerHandlerLocator;
|
||||
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
||||
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
||||
use Symfony\Component\Messenger\TraceableMessageBus;
|
||||
use Symfony\Component\Messenger\Transport\ReceiverInterface;
|
||||
@ -116,7 +115,7 @@ class MessengerPass implements CompilerPassInterface
|
||||
}
|
||||
|
||||
if (!\class_exists($messageClass)) {
|
||||
$messageClassLocation = isset($tag['handles']) ? 'declared in your tag attribute "handles"' : $r->implementsInterface(MessageHandlerInterface::class) ? sprintf('returned by method "%s::getHandledMessages()"', $r->getName()) : sprintf('used as argument type in method "%s::%s()"', $r->getName(), $method);
|
||||
$messageClassLocation = isset($tag['handles']) ? 'declared in your tag attribute "handles"' : $r->implementsInterface(MessageSubscriberInterface::class) ? sprintf('returned by method "%s::getHandledMessages()"', $r->getName()) : sprintf('used as argument type in method "%s::%s()"', $r->getName(), $method);
|
||||
|
||||
throw new RuntimeException(sprintf('Invalid handler service "%s": message class "%s" %s does not exist.', $serviceId, $messageClass, $messageClassLocation));
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ use Symfony\Component\Messenger\DataCollector\MessengerDataCollector;
|
||||
use Symfony\Component\Messenger\DependencyInjection\MessengerPass;
|
||||
use Symfony\Component\Messenger\Envelope;
|
||||
use Symfony\Component\Messenger\Handler\ChainHandler;
|
||||
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
||||
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
use Symfony\Component\Messenger\Middleware\AllowNoHandlerMiddleware;
|
||||
@ -326,13 +327,28 @@ class MessengerPassTest extends TestCase
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaInterface": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" returned by method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaInterface::getHandledMessages()" does not exist.
|
||||
* @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaHandlerInterface": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" used as argument type in method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaHandlerInterface::__invoke()" does not exist.
|
||||
*/
|
||||
public function testUndefinedMessageClassForHandlerViaInterface()
|
||||
public function testUndefinedMessageClassForHandlerImplementingMessageHandlerInterface()
|
||||
{
|
||||
$container = $this->getContainerBuilder();
|
||||
$container
|
||||
->register(UndefinedMessageHandlerViaInterface::class, UndefinedMessageHandlerViaInterface::class)
|
||||
->register(UndefinedMessageHandlerViaHandlerInterface::class, UndefinedMessageHandlerViaHandlerInterface::class)
|
||||
->addTag('messenger.message_handler')
|
||||
;
|
||||
|
||||
(new MessengerPass())->process($container);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaSubscriberInterface": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" returned by method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandlerViaSubscriberInterface::getHandledMessages()" does not exist.
|
||||
*/
|
||||
public function testUndefinedMessageClassForHandlerImplementingMessageSubscriberInterface()
|
||||
{
|
||||
$container = $this->getContainerBuilder();
|
||||
$container
|
||||
->register(UndefinedMessageHandlerViaSubscriberInterface::class, UndefinedMessageHandlerViaSubscriberInterface::class)
|
||||
->addTag('messenger.message_handler')
|
||||
;
|
||||
|
||||
@ -600,7 +616,14 @@ class UndefinedMessageHandler
|
||||
}
|
||||
}
|
||||
|
||||
class UndefinedMessageHandlerViaInterface implements MessageSubscriberInterface
|
||||
class UndefinedMessageHandlerViaHandlerInterface implements MessageHandlerInterface
|
||||
{
|
||||
public function __invoke(UndefinedMessage $message)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
class UndefinedMessageHandlerViaSubscriberInterface implements MessageSubscriberInterface
|
||||
{
|
||||
public static function getHandledMessages(): iterable
|
||||
{
|
||||
|
Reference in New Issue
Block a user