diff --git a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php index da342e8c31..ab7771b9ae 100644 --- a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php +++ b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php @@ -339,14 +339,17 @@ class MessengerPass implements CompilerPassInterface if ($container->findDefinition($messengerMiddlewareId)->isAbstract()) { $childDefinition = new ChildDefinition($messengerMiddlewareId); $childDefinition->setArguments($arguments); - $container->setDefinition($messengerMiddlewareId = $busId.'.middleware.'.$id.'.'.ContainerBuilder::hash($arguments), $childDefinition); + if (isset($middlewareReferences[$messengerMiddlewareId = $busId.'.middleware.'.$id])) { + $messengerMiddlewareId .= '.'.ContainerBuilder::hash($arguments); + } + $container->setDefinition($messengerMiddlewareId, $childDefinition); } elseif ($arguments) { throw new RuntimeException(sprintf('Invalid middleware factory "%s": a middleware factory must be an abstract definition.', $id)); } - $middlewareReferences[] = new Reference($messengerMiddlewareId); + $middlewareReferences[$messengerMiddlewareId] = new Reference($messengerMiddlewareId); } - $container->getDefinition($busId)->replaceArgument(0, new IteratorArgument($middlewareReferences)); + $container->getDefinition($busId)->replaceArgument(0, new IteratorArgument(array_values($middlewareReferences))); } } diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index 0644982c64..a0956ec0f8 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -517,7 +517,7 @@ class MessengerPassTest extends TestCase (new ResolveChildDefinitionsPass())->process($container); $this->assertTrue($container->hasDefinition( - $factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs1) + $factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory' )); $this->assertEquals( ['foo', 'bar'], @@ -535,7 +535,7 @@ class MessengerPassTest extends TestCase ); $this->assertTrue($container->hasDefinition( - $factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default.'.ContainerBuilder::hash([]) + $factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default' )); $this->assertEquals( ['some_default'],