bug #28059 [Messenger] Fix error message on undefined message class for non-subscriber handler (chalasr)
This PR was merged into the 4.1 branch.
Discussion
----------
[Messenger] Fix error message on undefined message class for non-subscriber handler
| Q | A
| ------------- | ---
| Branch? | 4.1
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
Fixes a wrong hint talking about `getHandledMessages()` while the handler does not implement `MessageSubscriberInterface`.
Commits
-------
e5ea3bc032
[Messenger] Fix error message on undefined message class for non-subscriber handler
This commit is contained in:
commit
afb17aba09
@ -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