[DI] Improve exception message on missing $ of named argument
This commit is contained in:
parent
e9aaaafbbb
commit
d0e44996f9
@ -53,6 +53,10 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass
|
|||||||
$parameters = $r->getParameters();
|
$parameters = $r->getParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($key[0]) && '$' !== $key[0] && !class_exists($key)) {
|
||||||
|
throw new InvalidArgumentException(sprintf('Invalid service "%s": did you forget to add the "$" prefix to argument "%s"?', $this->currentId, $key));
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($key[0]) && '$' === $key[0]) {
|
if (isset($key[0]) && '$' === $key[0]) {
|
||||||
foreach ($parameters as $j => $p) {
|
foreach ($parameters as $j => $p) {
|
||||||
if ($key === '$'.$p->name) {
|
if ($key === '$'.$p->name) {
|
||||||
|
@ -149,6 +149,21 @@ class ResolveNamedArgumentsPassTest extends TestCase
|
|||||||
$this->assertEquals([new Reference('foo'), '123'], $definition->getArguments());
|
$this->assertEquals([new Reference('foo'), '123'], $definition->getArguments());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
|
||||||
|
* @expectedExceptionMessage Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": did you forget to add the "$" prefix to argument "apiKey"?
|
||||||
|
*/
|
||||||
|
public function testTypedArgumentWithMissingDollar()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
|
||||||
|
$definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
|
||||||
|
$definition->setArgument('apiKey', '123');
|
||||||
|
|
||||||
|
$pass = new ResolveNamedArgumentsPass();
|
||||||
|
$pass->process($container);
|
||||||
|
}
|
||||||
|
|
||||||
public function testResolvesMultipleArgumentsOfTheSameType()
|
public function testResolvesMultipleArgumentsOfTheSameType()
|
||||||
{
|
{
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
|
Reference in New Issue
Block a user