diff --git a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php index 361f45f163..37b6bda4fe 100644 --- a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php +++ b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php @@ -157,7 +157,11 @@ class MessengerPass implements CompilerPassInterface $receiverMapping = array(); foreach ($container->findTaggedServiceIds('messenger.receiver') as $id => $tags) { foreach ($tags as $tag) { - $receiverMapping[$tag['name'] ?? $id] = new Reference($id); + $receiverMapping[$id] = new Reference($id); + + if (isset($tag['name'])) { + $receiverMapping[$tag['name']] = $receiverMapping[$id]; + } } } @@ -171,8 +175,8 @@ class MessengerPass implements CompilerPassInterface foreach ($tags as $tag) { $senderLocatorMapping[$id] = new Reference($id); - if ($tag['name']) { - $senderLocatorMapping[$tag['name']] = new Reference($id); + if (isset($tag['name'])) { + $senderLocatorMapping[$tag['name']] = $senderLocatorMapping[$id]; } } } diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index cbc693d336..0cf093f45c 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -99,7 +99,17 @@ class MessengerPassTest extends TestCase (new MessengerPass())->process($container); - $this->assertEquals(array('amqp' => new Reference(AmqpReceiver::class)), $container->getDefinition('messenger.receiver_locator')->getArgument(0)); + $this->assertEquals(array('amqp' => new Reference(AmqpReceiver::class), AmqpReceiver::class => new Reference(AmqpReceiver::class)), $container->getDefinition('messenger.receiver_locator')->getArgument(0)); + } + + public function testItRegistersReceiversWithoutTagName() + { + $container = $this->getContainerBuilder(); + $container->register(AmqpReceiver::class, AmqpReceiver::class)->addTag('messenger.receiver'); + + (new MessengerPass())->process($container); + + $this->assertEquals(array(AmqpReceiver::class => new Reference(AmqpReceiver::class)), $container->getDefinition('messenger.receiver_locator')->getArgument(0)); } public function testItRegistersSenders() @@ -112,6 +122,16 @@ class MessengerPassTest extends TestCase $this->assertEquals(array('amqp' => new Reference(AmqpSender::class), AmqpSender::class => new Reference(AmqpSender::class)), $container->getDefinition('messenger.sender_locator')->getArgument(0)); } + public function testItRegistersSenderWithoutTagName() + { + $container = $this->getContainerBuilder(); + $container->register(AmqpSender::class, AmqpSender::class)->addTag('messenger.sender'); + + (new MessengerPass())->process($container); + + $this->assertEquals(array(AmqpSender::class => new Reference(AmqpSender::class)), $container->getDefinition('messenger.sender_locator')->getArgument(0)); + } + /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" used as argument type in method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler::__invoke()" does not exist.