From 38d71d692c29fcd3094c7085709587e8e49e1c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Andr=C3=A9?= Date: Thu, 11 Apr 2024 01:22:32 +0200 Subject: [PATCH] [HttpKernel] Ensure controllers are not lazy Fix #54542 --- .../RegisterControllerArgumentLocatorsPass.php | 1 + ...egisterControllerArgumentLocatorsPassTest.php | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php index 3dbaff564194b..0bdba44b0e299 100644 --- a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php +++ b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php @@ -70,6 +70,7 @@ public function process(ContainerBuilder $container) foreach ($container->findTaggedServiceIds($this->controllerTag, true) as $id => $tags) { $def = $container->getDefinition($id); $def->setPublic(true); + $def->setLazy(false); $class = $def->getClass(); $autowire = $def->isAutowired(); $bindings = $def->getBindings(); diff --git a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php index 3dec2e912af71..40e6ea0748fc3 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php @@ -25,6 +25,7 @@ use Symfony\Component\DependencyInjection\TypedReference; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\DependencyInjection\RegisterControllerArgumentLocatorsPass; +use Symfony\Component\HttpKernel\Tests\Fixtures\DataCollector\DummyController; use Symfony\Component\HttpKernel\Tests\Fixtures\Suit; class RegisterControllerArgumentLocatorsPassTest extends TestCase @@ -285,6 +286,21 @@ public function testControllersAreMadePublic() $this->assertTrue($container->getDefinition('foo')->isPublic()); } + public function testControllersAreMadeNonLazy() + { + $container = new ContainerBuilder(); + $container->register('argument_resolver.service')->addArgument([]); + + $container->register('foo', DummyController::class) + ->addTag('controller.service_arguments') + ->setLazy(true); + + $pass = new RegisterControllerArgumentLocatorsPass(); + $pass->process($container); + + $this->assertFalse($container->getDefinition('foo')->isLazy()); + } + /** * @dataProvider provideBindings */