diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php index cd6bb6fe8c..2dc53da89a 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php @@ -55,7 +55,13 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass if (isset($key[0]) && '$' === $key[0]) { foreach ($parameters as $j => $p) { if ($key === '$'.$p->name) { - $resolvedArguments[$j] = $argument; + if ($p->isVariadic() && \is_array($argument)) { + foreach ($argument as $variadicArgument) { + $resolvedArguments[$j++] = $variadicArgument; + } + } else { + $resolvedArguments[$j] = $argument; + } continue 2; } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveNamedArgumentsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveNamedArgumentsPassTest.php index fe681b41df..4665ee96f5 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveNamedArgumentsPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveNamedArgumentsPassTest.php @@ -17,6 +17,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass; use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy; +use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsVariadicsDummy; use Symfony\Component\DependencyInjection\Tests\Fixtures\SimilarArgumentsDummy; /** @@ -152,6 +153,36 @@ class ResolveNamedArgumentsPassTest extends TestCase $this->assertEquals(array(new Reference('bar'), 'qwerty', new Reference('foo')), $definition->getArguments()); } + + public function testVariadics() + { + $container = new ContainerBuilder(); + + $definition = $container->register(NamedArgumentsVariadicsDummy::class, NamedArgumentsVariadicsDummy::class); + $definition->setArguments( + array( + '$class' => new \stdClass(), + '$variadics' => array( + new Reference('foo'), + new Reference('bar'), + new Reference('baz'), + ), + ) + ); + + $pass = new ResolveNamedArgumentsPass(); + $pass->process($container); + + $this->assertEquals( + array( + 0 => new \stdClass(), + 1 => new Reference('foo'), + 2 => new Reference('bar'), + 3 => new Reference('baz'), + ), + $definition->getArguments() + ); + } } class NoConstructor diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/NamedArgumentsVariadicsDummy.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/NamedArgumentsVariadicsDummy.php new file mode 100644 index 0000000000..39a8a8e6b4 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/NamedArgumentsVariadicsDummy.php @@ -0,0 +1,10 @@ +