Skip to content

Commit c9b4d87

Browse files
committed
Allow to override only a few of the abstract middleware definition
1 parent 0970b09 commit c9b4d87

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1548,7 +1548,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
15481548
}
15491549

15501550
if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class)) {
1551-
array_unshift($middleware, array('id' => 'traceable', 'arguments' => array($busId)));
1551+
array_unshift($middleware, array('id' => 'traceable', 'arguments' => array(1 => $busId)));
15521552
}
15531553

15541554
$container->setParameter($busId.'.middleware', $middleware);

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ private function registerBusMiddleware(ContainerBuilder $container, string $busI
319319
if (($definition = $container->findDefinition($messengerMiddlewareId))->isAbstract()) {
320320
$childDefinition = new ChildDefinition($messengerMiddlewareId);
321321
$count = \count($definition->getArguments());
322-
foreach (array_values($arguments ?? array()) as $key => $argument) {
322+
323+
foreach (($arguments ?? array()) as $key => $argument) {
323324
// Parent definition can provide default arguments.
324325
// Replace each explicitly or add if not set:
325326
$key < $count ? $childDefinition->replaceArgument($key, $argument) : $childDefinition->addArgument($argument);

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

+10
Original file line numberDiff line numberDiff line change
@@ -494,12 +494,14 @@ public function testRegistersMiddlewareFromServices()
494494
$container = $this->getContainerBuilder($fooBusId = 'messenger.bus.foo');
495495
$container->register('middleware_with_factory', UselessMiddleware::class)->addArgument('some_default')->setAbstract(true);
496496
$container->register('middleware_with_factory_using_default', UselessMiddleware::class)->addArgument('some_default')->setAbstract(true);
497+
$container->register('middleware_with_factory_using_a_lot_of_defaults', UselessMiddleware::class)->setArguments(['one', 'two', 'three'])->setAbstract(true);
497498
$container->register(UselessMiddleware::class, UselessMiddleware::class);
498499

499500
$container->setParameter($middlewareParameter = $fooBusId.'.middleware', array(
500501
array('id' => UselessMiddleware::class),
501502
array('id' => 'middleware_with_factory', 'arguments' => array('foo', 'bar')),
502503
array('id' => 'middleware_with_factory_using_default'),
504+
array('id' => 'middleware_with_factory_using_a_lot_of_defaults', 'arguments' => array(1 => '2', 3 => 'four'))
503505
));
504506

505507
(new MessengerPass())->process($container);
@@ -519,10 +521,18 @@ public function testRegistersMiddlewareFromServices()
519521
'parent default argument is used'
520522
);
521523

524+
$this->assertTrue($container->hasDefinition($factoryWithALotOfDefaultsChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_a_lot_of_defaults'));
525+
$this->assertEquals(
526+
array('one', '2', 'three', 'four'),
527+
$container->getDefinition($factoryWithALotOfDefaultsChildMiddlewareId)->getArguments(),
528+
'parent arguments are not overwritten'
529+
);
530+
522531
$this->assertEquals(array(
523532
new Reference(UselessMiddleware::class),
524533
new Reference($factoryChildMiddlewareId),
525534
new Reference($factoryWithDefaultChildMiddlewareId),
535+
new Reference($factoryWithALotOfDefaultsChildMiddlewareId),
526536
), $container->getDefinition($fooBusId)->getArgument(0)->getValues());
527537
$this->assertFalse($container->hasParameter($middlewareParameter));
528538
}

0 commit comments

Comments
 (0)