diff --git a/.travis.yml b/.travis.yml index d6bea509a1..73fe5d219c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,9 +29,6 @@ matrix: env: deps=high - php: 7.3 env: deps=low - - php: 7.4snapshot - allow_failures: - - php: 7.4snapshot fast_finish: true cache: diff --git a/composer.json b/composer.json index de4ec7f61c..1a7c9d4f53 100644 --- a/composer.json +++ b/composer.json @@ -114,7 +114,7 @@ "psr/http-client": "^1.0", "psr/simple-cache": "^1.0", "egulias/email-validator": "~1.2,>=1.2.8|~2.0", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8|~5.0", + "symfony/phpunit-bridge": "^3.4.31|^4.3.4|~5.0", "symfony/security-acl": "~2.8|~3.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0" }, diff --git a/phpunit b/phpunit index 7b0b47cf7b..b2883a1e05 100755 --- a/phpunit +++ b/phpunit @@ -8,8 +8,8 @@ if (!file_exists(__DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) { exit(1); } if (!getenv('SYMFONY_PHPUNIT_VERSION')) { - if (\PHP_VERSION_ID >= 70400) { - putenv('SYMFONY_PHPUNIT_VERSION=8.2'); + if (\PHP_VERSION_ID >= 70200) { + putenv('SYMFONY_PHPUNIT_VERSION=8.3'); } elseif (\PHP_VERSION_ID >= 70000) { putenv('SYMFONY_PHPUNIT_VERSION=6.5'); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/LegacyRouteLoaderContainerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/LegacyRouteLoaderContainerTest.php index cd002453ba..b0492efd89 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/LegacyRouteLoaderContainerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/LegacyRouteLoaderContainerTest.php @@ -39,7 +39,7 @@ class LegacyRouteLoaderContainerTest extends TestCase /** * {@inheritdoc} */ - protected function setUp() + protected function setUp(): void { $this->container = new Container(); $this->container->set('foo', new \stdClass()); diff --git a/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php b/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php index 9b633eaa0d..447df4ae8f 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(string $class) { + $class = ltrim($class, '\\'); + if ($this->container->has($class)) { return $this->container->get($class); } diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php index 16779be286..c39dac3ca5 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php @@ -119,6 +119,36 @@ class ContainerControllerResolverTest extends ControllerResolverTest $this->assertSame($service, $controller); } + /** + * @dataProvider getControllers + */ + public function testInstantiateControllerWhenControllerStartsWithABackslash($controller) + { + $service = new ControllerTestService('foo'); + $class = ControllerTestService::class; + + $container = $this->createMockContainer(); + $container->expects($this->once())->method('has')->with($class)->willReturn(true); + $container->expects($this->once())->method('get')->with($class)->willReturn($service); + + $resolver = $this->createControllerResolver(null, $container); + $request = Request::create('/'); + $request->attributes->set('_controller', $controller); + + $controller = $resolver->getController($request); + + $this->assertInstanceOf(ControllerTestService::class, $controller[0]); + $this->assertSame('action', $controller[1]); + } + + public function getControllers() + { + return [ + ['\\'.ControllerTestService::class.'::action'], + ['\\'.ControllerTestService::class.':action'], + ]; + } + public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName() { $this->expectException('InvalidArgumentException');