Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d867bc

Browse files
bug #37569 [Messenger] Allow same middleware to be used multiple times with different arguments (HypeMC)
This PR was merged into the 4.4 branch. Discussion ---------- [Messenger] Allow same middleware to be used multiple times with different arguments | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #37568 | License | MIT | Doc PR | - Middleware service names now take into account arguments as well to allow the same middleware to be used multiple times with different arguments: ```yaml framework: messenger: buses: messenger.bus.default: middleware: - doctrine_ping_connection: ['main'] - doctrine_ping_connection: ['logs'] ``` Commits ------- d10e43d Allow same middleware to be used multiple times with different arguments
2 parents ebc7f4b + d10e43d commit 0d867bc

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ private function registerBusMiddleware(ContainerBuilder $container, string $busI
339339
if ($container->findDefinition($messengerMiddlewareId)->isAbstract()) {
340340
$childDefinition = new ChildDefinition($messengerMiddlewareId);
341341
$childDefinition->setArguments($arguments);
342-
$container->setDefinition($messengerMiddlewareId = $busId.'.middleware.'.$id, $childDefinition);
342+
$container->setDefinition($messengerMiddlewareId = $busId.'.middleware.'.$id.'.'.ContainerBuilder::hash($arguments), $childDefinition);
343343
} elseif ($arguments) {
344344
throw new RuntimeException(sprintf('Invalid middleware factory "%s": a middleware factory must be an abstract definition.', $id));
345345
}

src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -508,21 +508,35 @@ public function testRegistersMiddlewareFromServices()
508508

509509
$container->setParameter($middlewareParameter = $fooBusId.'.middleware', [
510510
['id' => UselessMiddleware::class],
511-
['id' => 'middleware_with_factory', 'arguments' => ['index_0' => 'foo', 'bar']],
511+
['id' => 'middleware_with_factory', 'arguments' => $factoryChildMiddlewareArgs1 = ['index_0' => 'foo', 'bar']],
512+
['id' => 'middleware_with_factory', 'arguments' => $factoryChildMiddlewareArgs2 = ['index_0' => 'baz']],
512513
['id' => 'middleware_with_factory_using_default'],
513514
]);
514515

515516
(new MessengerPass())->process($container);
516517
(new ResolveChildDefinitionsPass())->process($container);
517518

518-
$this->assertTrue($container->hasDefinition($factoryChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory'));
519+
$this->assertTrue($container->hasDefinition(
520+
$factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs1)
521+
));
519522
$this->assertEquals(
520523
['foo', 'bar'],
521-
$container->getDefinition($factoryChildMiddlewareId)->getArguments(),
524+
$container->getDefinition($factoryChildMiddlewareArgs1Id)->getArguments(),
522525
'parent default argument is overridden, and next ones appended'
523526
);
524527

525-
$this->assertTrue($container->hasDefinition($factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default'));
528+
$this->assertTrue($container->hasDefinition(
529+
$factoryChildMiddlewareArgs2Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs2)
530+
));
531+
$this->assertEquals(
532+
['baz'],
533+
$container->getDefinition($factoryChildMiddlewareArgs2Id)->getArguments(),
534+
'parent default argument is overridden, and next ones appended'
535+
);
536+
537+
$this->assertTrue($container->hasDefinition(
538+
$factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default.'.ContainerBuilder::hash([])
539+
));
526540
$this->assertEquals(
527541
['some_default'],
528542
$container->getDefinition($factoryWithDefaultChildMiddlewareId)->getArguments(),
@@ -531,7 +545,8 @@ public function testRegistersMiddlewareFromServices()
531545

532546
$this->assertEquals([
533547
new Reference(UselessMiddleware::class),
534-
new Reference($factoryChildMiddlewareId),
548+
new Reference($factoryChildMiddlewareArgs1Id),
549+
new Reference($factoryChildMiddlewareArgs2Id),
535550
new Reference($factoryWithDefaultChildMiddlewareId),
536551
], $container->getDefinition($fooBusId)->getArgument(0)->getValues());
537552
$this->assertFalse($container->hasParameter($middlewareParameter));

0 commit comments

Comments
 (0)