Resolve invokable controllers short notations using ServiceValueResolver

This commit is contained in:
Robin Chalas 2017-04-07 11:26:42 +02:00
parent 549af739af
commit 717fa85b91
2 changed files with 48 additions and 0 deletions

View File

@ -60,6 +60,9 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface
if ($controllerDef->getClass() === $id) {
$controllers[$id.'::'.$action] = $argumentRef;
}
if ('__invoke' === $action) {
$controllers[$id] = $argumentRef;
}
continue;
}
}

View File

@ -78,6 +78,44 @@ class RemoveEmptyControllerArgumentLocatorsPassTest extends TestCase
);
$this->assertEquals($expected, array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0)));
}
public function testInvoke()
{
$container = new ContainerBuilder();
$resolver = $container->register('argument_resolver.service')->addArgument(array());
$container->register('invokable', InvokableRegisterTestController::class)
->addTag('controller.service_arguments')
;
(new RegisterControllerArgumentLocatorsPass())->process($container);
(new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
$this->assertEquals(
array('invokable:__invoke', 'invokable'),
array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0))
);
}
public function testInvokeSameIdClass()
{
$container = new ContainerBuilder();
$resolver = $container->register('argument_resolver.service')->addArgument(array());
$container->register(InvokableRegisterTestController::class, InvokableRegisterTestController::class)
->addTag('controller.service_arguments')
;
(new RegisterControllerArgumentLocatorsPass())->process($container);
(new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
$expected = array(
InvokableRegisterTestController::class.':__invoke',
InvokableRegisterTestController::class.'::__invoke',
InvokableRegisterTestController::class,
);
$this->assertEquals($expected, array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0)));
}
}
class RemoveTestController1
@ -97,3 +135,10 @@ class RemoveTestController2
{
}
}
class InvokableRegisterTestController
{
public function __invoke(\stdClass $bar)
{
}
}