don't bind scalar values to controller method arguments

This commit is contained in:
Yonel Ceruto 2017-10-18 01:29:21 -04:00
parent f35996d228
commit a1df9af20f
2 changed files with 21 additions and 0 deletions

View File

@ -135,6 +135,11 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface
$binding = $bindings[$bindingName];
list($bindingValue, $bindingId) = $binding->getValues();
if (!$bindingValue instanceof Reference) {
continue;
}
$binding->setValues(array($bindingValue, $bindingId, true));
$args[$p->name] = $bindingValue;

View File

@ -310,6 +310,22 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
{
return array(array(ControllerDummy::class), array('$bar'));
}
public function testDoNotBindScalarValueToControllerArgument()
{
$container = new ContainerBuilder();
$resolver = $container->register('argument_resolver.service')->addArgument(array());
$container->register('foo', ArgumentWithoutTypeController::class)
->setBindings(array('$someArg' => '%foo%'))
->addTag('controller.service_arguments');
$pass = new RegisterControllerArgumentLocatorsPass();
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
$this->assertEmpty($locator);
}
}
class RegisterTestController