[HttpKernel] Fix service arg resolver for controllers as array callables

This commit is contained in:
Nicolas Grekas 2017-11-14 23:29:28 +02:00 committed by Samuel ROZE
parent a9e9f36799
commit fc3d3bbf60
No known key found for this signature in database
GPG Key ID: 835426F55A19FB84

View File

@ -35,7 +35,13 @@ final class ServiceValueResolver implements ArgumentValueResolverInterface
*/
public function supports(Request $request, ArgumentMetadata $argument)
{
return is_string($controller = $request->attributes->get('_controller')) && $this->container->has($controller) && $this->container->get($controller)->has($argument->getName());
$controller = $request->attributes->get('_controller');
if (\is_array($controller) && \is_callable($controller, true) && \is_string($controller[0])) {
$controller = $controller[0].'::'.$controller[1];
}
return \is_string($controller) && $this->container->has($controller) && $this->container->get($controller)->has($argument->getName());
}
/**
@ -43,6 +49,10 @@ final class ServiceValueResolver implements ArgumentValueResolverInterface
*/
public function resolve(Request $request, ArgumentMetadata $argument)
{
yield $this->container->get($request->attributes->get('_controller'))->get($argument->getName());
if (\is_array($controller = $request->attributes->get('_controller'))) {
$controller = $controller[0].'::'.$controller[1];
}
yield $this->container->get($controller)->get($argument->getName());
}
}