[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\DependencyInjection\Reference;
|
||||||
use Symfony\Component\Messenger\Handler\ChainHandler;
|
use Symfony\Component\Messenger\Handler\ChainHandler;
|
||||||
use Symfony\Component\Messenger\Handler\Locator\ContainerHandlerLocator;
|
use Symfony\Component\Messenger\Handler\Locator\ContainerHandlerLocator;
|
||||||
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
|
||||||
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
||||||
use Symfony\Component\Messenger\TraceableMessageBus;
|
use Symfony\Component\Messenger\TraceableMessageBus;
|
||||||
use Symfony\Component\Messenger\Transport\ReceiverInterface;
|
use Symfony\Component\Messenger\Transport\ReceiverInterface;
|
||||||
@ -116,7 +115,7 @@ class MessengerPass implements CompilerPassInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!\class_exists($messageClass)) {
|
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));
|
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\DependencyInjection\MessengerPass;
|
||||||
use Symfony\Component\Messenger\Envelope;
|
use Symfony\Component\Messenger\Envelope;
|
||||||
use Symfony\Component\Messenger\Handler\ChainHandler;
|
use Symfony\Component\Messenger\Handler\ChainHandler;
|
||||||
|
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
||||||
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
|
||||||
use Symfony\Component\Messenger\MessageBusInterface;
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
use Symfony\Component\Messenger\Middleware\AllowNoHandlerMiddleware;
|
use Symfony\Component\Messenger\Middleware\AllowNoHandlerMiddleware;
|
||||||
@ -326,13 +327,28 @@ class MessengerPassTest extends TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
* @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 = $this->getContainerBuilder();
|
||||||
$container
|
$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')
|
->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
|
public static function getHandledMessages(): iterable
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user