[DependencyInjection] Accept existing interfaces as valid named args
This commit is contained in:
parent
27383a5ca8
commit
6612e9a939
@ -53,7 +53,7 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass
|
||||
$parameters = $r->getParameters();
|
||||
}
|
||||
|
||||
if (isset($key[0]) && '$' !== $key[0] && !class_exists($key)) {
|
||||
if (isset($key[0]) && '$' !== $key[0] && !class_exists($key) && !interface_exists($key, false)) {
|
||||
throw new InvalidArgumentException(sprintf('Invalid service "%s": did you forget to add the "$" prefix to argument "%s"?', $this->currentId, $key));
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Compiler\ResolveNamedArgumentsPass;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
@ -152,6 +153,19 @@ class ResolveNamedArgumentsPassTest extends TestCase
|
||||
$pass->process($container);
|
||||
}
|
||||
|
||||
public function testInterfaceTypedArgument()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
|
||||
$definition->setArgument(ContainerInterface::class, $expected = new Reference('foo'));
|
||||
|
||||
$pass = new ResolveNamedArgumentsPass();
|
||||
$pass->process($container);
|
||||
|
||||
$this->assertSame($expected, $definition->getArgument(3));
|
||||
}
|
||||
|
||||
public function testResolvesMultipleArgumentsOfTheSameType()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
@ -2,12 +2,14 @@
|
||||
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
|
||||
/**
|
||||
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||
*/
|
||||
class NamedArgumentsDummy
|
||||
{
|
||||
public function __construct(CaseSensitiveClass $c, $apiKey, $hostName)
|
||||
public function __construct(CaseSensitiveClass $c, $apiKey, $hostName, ContainerInterface $interface)
|
||||
{
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user