[DependencyInjection] Added support for variadics in named arguments
This commit is contained in:
parent
a135690130
commit
b5c0e8977c
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
|
||||
|
||||
class NamedArgumentsVariadicsDummy
|
||||
{
|
||||
public function __construct(\stdClass $class, ...$variadics)
|
||||
{
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user