Merge branch '5.0' into 5.1

* 5.0:
  [Messenger] fix computing the id of same-name middleware
This commit is contained in:
Nicolas Grekas 2020-07-23 12:40:24 +02:00
commit ea258254d0
2 changed files with 8 additions and 5 deletions

View File

@ -339,15 +339,18 @@ class MessengerPass implements CompilerPassInterface
if ($container->findDefinition($messengerMiddlewareId)->isAbstract()) { if ($container->findDefinition($messengerMiddlewareId)->isAbstract()) {
$childDefinition = new ChildDefinition($messengerMiddlewareId); $childDefinition = new ChildDefinition($messengerMiddlewareId);
$childDefinition->setArguments($arguments); $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) { } elseif ($arguments) {
throw new RuntimeException(sprintf('Invalid middleware factory "%s": a middleware factory must be an abstract definition.', $id)); 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)));
} }
private function getServiceClass(ContainerBuilder $container, string $serviceId): string private function getServiceClass(ContainerBuilder $container, string $serviceId): string

View File

@ -546,7 +546,7 @@ class MessengerPassTest extends TestCase
(new ResolveChildDefinitionsPass())->process($container); (new ResolveChildDefinitionsPass())->process($container);
$this->assertTrue($container->hasDefinition( $this->assertTrue($container->hasDefinition(
$factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs1) $factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory'
)); ));
$this->assertEquals( $this->assertEquals(
['foo', 'bar'], ['foo', 'bar'],
@ -564,7 +564,7 @@ class MessengerPassTest extends TestCase
); );
$this->assertTrue($container->hasDefinition( $this->assertTrue($container->hasDefinition(
$factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default.'.ContainerBuilder::hash([]) $factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default'
)); ));
$this->assertEquals( $this->assertEquals(
['some_default'], ['some_default'],