Issue #2988152 by slootjes, tim.plunkett: Allow invokable services as controllers

8.7.x
Alex Pott 2018-09-12 14:29:48 +02:00
parent 9547959081
commit aca89d4c5a
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
2 changed files with 4 additions and 3 deletions

View File

@ -66,9 +66,7 @@ class ControllerResolver extends BaseControllerResolver implements ControllerRes
if (function_exists($controller)) {
return $controller;
}
elseif (method_exists($controller, '__invoke')) {
return new $controller();
}
return $this->classResolver->getInstanceFromDefinition($controller);
}
$callable = $this->createController($controller);

View File

@ -171,6 +171,7 @@ class ControllerResolverTest extends UnitTestCase {
* @dataProvider providerTestGetControllerFromDefinition
*/
public function testGetControllerFromDefinition($definition, $output) {
$this->container->set('invoke_service', new MockInvokeController());
$controller = $this->controllerResolver->getControllerFromDefinition($definition);
$this->assertCallableController($controller, NULL, $output);
}
@ -188,6 +189,8 @@ class ControllerResolverTest extends UnitTestCase {
[new MockInvokeController(), 'This used __invoke().'],
// Tests a class using __invoke().
['Drupal\Tests\Core\Controller\MockInvokeController', 'This used __invoke().'],
// Tests a service from the container using __invoke().
['invoke_service', 'This used __invoke().'],
];
}