don't bind scalar values to controller method arguments
This commit is contained in:
parent
f35996d228
commit
a1df9af20f
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user