From 6fdf2527d6f99ac1cafa006f87549cdecfbb582e Mon Sep 17 00:00:00 2001 From: Amrouche Hamza Date: Sun, 14 Jul 2019 17:05:44 +0200 Subject: [PATCH] [HttpKernel] trim the leading backslash in the controller init --- .../ContainerControllerResolver.php | 2 ++ .../Controller/ControllerResolverTest.php | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php b/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php index 4f80921cf5..e1da17388d 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php @@ -47,6 +47,8 @@ class ContainerControllerResolver extends ControllerResolver */ protected function instantiateController($class) { + $class = ltrim($class, '\\'); + if ($this->container->has($class)) { return $this->container->get($class); } diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php index 77ce524fc6..576ad76f03 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php @@ -38,6 +38,18 @@ class ControllerResolverTest extends TestCase $this->assertSame($lambda, $controller); } + public function testGetControllerWithStartingBackslash() + { + $resolver = $this->createControllerResolver(); + + $request = Request::create('/'); + $request->attributes->set('_controller', '\\'.ControllerTest::class.'::publicAction'); + $controller = $resolver->getController($request); + + $this->assertInstanceOf(ControllerTest::class, $controller[0]); + $this->assertSame('publicAction', $controller[1]); + } + public function testGetControllerWithObjectAndInvokeMethod() { $resolver = $this->createControllerResolver(); @@ -71,6 +83,17 @@ class ControllerResolverTest extends TestCase $this->assertSame('publicAction', $controller[1]); } + public function testGetControllerWithClassAndMethodAsArrayWithBackslash() + { + $resolver = $this->createControllerResolver(); + + $request = Request::create('/'); + $request->attributes->set('_controller', ['\\'.ControllerTest::class, 'publicAction']); + $controller = $resolver->getController($request); + $this->assertInstanceOf(ControllerTest::class, $controller[0]); + $this->assertSame('publicAction', $controller[1]); + } + public function testGetControllerWithClassAndMethodAsString() { $resolver = $this->createControllerResolver();