From 9dca09bee9825d7f97969ffef3d2baf9024b2c20 Mon Sep 17 00:00:00 2001 From: David Maicher Date: Sat, 14 Oct 2017 10:54:30 +0200 Subject: [PATCH 1/5] [FrameworkBundle] add config option for resetting services --- .../DependencyInjection/Configuration.php | 1 + .../DependencyInjection/FrameworkExtension.php | 5 +++++ .../Resources/config/schema/symfony-1.0.xsd | 1 + .../Tests/DependencyInjection/ConfigurationTest.php | 1 + .../Fixtures/php/reset_services.php | 5 +++++ .../Fixtures/xml/reset_services.xml | 10 ++++++++++ .../Fixtures/yml/reset_services.yml | 2 ++ .../DependencyInjection/FrameworkExtensionTest.php | 13 +++++++++++++ 8 files changed, 38 insertions(+) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 4d5af046cbec2..501905385fcd6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -107,6 +107,7 @@ public function getConfigTreeBuilder() ->beforeNormalization()->ifString()->then(function ($v) { return array($v); })->end() ->prototype('scalar')->end() ->end() + ->booleanNode('reset_services')->defaultFalse()->end() ->end() ; diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 568bb0913ebc7..7677ff9127eea 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -56,6 +56,7 @@ use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface; use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\HttpKernel\EventListener\ServiceResetListener; use Symfony\Component\Lock\Factory; use Symfony\Component\Lock\Lock; use Symfony\Component\Lock\LockInterface; @@ -317,6 +318,10 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('web_link.xml'); } + if (!$config['reset_services']) { + $container->removeDefinition(ServiceResetListener::class); + } + $this->addAnnotatedClassesToCompile(array( '**\\Controller\\', '**\\Entity\\', diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index 181dd9334a80b..2e1dc92e6a53f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -38,6 +38,7 @@ + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index e6e83d40b538d..2d69293abcc87 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -352,6 +352,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor ), ), ), + 'reset_services' => false, ); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php new file mode 100644 index 0000000000000..d8681b153dfbb --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php @@ -0,0 +1,5 @@ +loadFromExtension('framework', array( + 'reset_services' => true, +)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml new file mode 100644 index 0000000000000..e18098b0dc811 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml new file mode 100644 index 0000000000000..46ec09bea4383 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml @@ -0,0 +1,2 @@ +framework: + reset_services: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 89f8f48182157..d63f052c84a41 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -32,6 +32,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpKernel\EventListener\ServiceResetListener; use Symfony\Component\PropertyAccess\PropertyAccessor; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer; @@ -998,6 +999,18 @@ public function testCachePoolServices() $this->assertCachePoolServiceDefinitionIsCreated($container, 'cache.def', 'cache.app', 11); } + public function testRemovesServiceResetListenerDefWhenOptionSetToFalse() + { + $container = $this->createContainerFromFile('default_config'); + $this->assertFalse($container->hasDefinition(ServiceResetListener::class)); + } + + public function testDoesNotRemoveServiceResetListenerDefWhenOptionSetToTrue() + { + $container = $this->createContainerFromFile('reset_services'); + $this->assertTrue($container->hasDefinition(ServiceResetListener::class)); + } + protected function createContainer(array $data = array()) { return new ContainerBuilder(new ParameterBag(array_merge(array( From 19ee0b0279519be8754aeb1e2cc90c57d6f99c86 Mon Sep 17 00:00:00 2001 From: David Maicher Date: Mon, 16 Oct 2017 20:09:56 +0200 Subject: [PATCH 2/5] rename option + add definition only if needed --- .../FrameworkBundle/DependencyInjection/Configuration.php | 2 +- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../FrameworkBundle/Resources/config/schema/symfony-1.0.xsd | 2 +- .../Bundle/FrameworkBundle/Resources/config/services.xml | 6 ------ .../Tests/DependencyInjection/ConfigurationTest.php | 2 +- .../DependencyInjection/Fixtures/php/reset_services.php | 2 +- .../DependencyInjection/Fixtures/xml/reset_services.xml | 2 +- .../DependencyInjection/Fixtures/yml/reset_services.yml | 2 +- .../Tests/DependencyInjection/FrameworkExtensionTest.php | 6 +++--- 9 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 501905385fcd6..ce92ec17b7c3d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -107,7 +107,7 @@ public function getConfigTreeBuilder() ->beforeNormalization()->ifString()->then(function ($v) { return array($v); })->end() ->prototype('scalar')->end() ->end() - ->booleanNode('reset_services')->defaultFalse()->end() + ->booleanNode('reset_services_on_terminate')->defaultFalse()->end() ->end() ; diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 7677ff9127eea..84e6fbd459b38 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -318,8 +318,8 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('web_link.xml'); } - if (!$config['reset_services']) { - $container->removeDefinition(ServiceResetListener::class); + if ($config['reset_services_on_terminate']) { + $container->register(ServiceResetListener::class)->addTag('kernel.event_subscriber'); } $this->addAnnotatedClassesToCompile(array( diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index 2e1dc92e6a53f..14fc42e63f95d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -38,7 +38,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml index 31ca2075e4a98..dea49cbc00538 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml @@ -74,11 +74,5 @@ - - - - - - diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 2d69293abcc87..502ceee8bf4f8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -352,7 +352,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor ), ), ), - 'reset_services' => false, + 'reset_services_on_terminate' => false, ); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php index d8681b153dfbb..e19272e392dbc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/reset_services.php @@ -1,5 +1,5 @@ loadFromExtension('framework', array( - 'reset_services' => true, + 'reset_services_on_terminate' => true, )); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml index e18098b0dc811..18fab3254afbb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/reset_services.xml @@ -6,5 +6,5 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml index 46ec09bea4383..4ddd9832e6135 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/reset_services.yml @@ -1,2 +1,2 @@ framework: - reset_services: true + reset_services_on_terminate: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index d63f052c84a41..c19b111ee16f0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -999,16 +999,16 @@ public function testCachePoolServices() $this->assertCachePoolServiceDefinitionIsCreated($container, 'cache.def', 'cache.app', 11); } - public function testRemovesServiceResetListenerDefWhenOptionSetToFalse() + public function testDoesNotAddServiceResetListenerDefWhenOptionSetToFalse() { $container = $this->createContainerFromFile('default_config'); $this->assertFalse($container->hasDefinition(ServiceResetListener::class)); } - public function testDoesNotRemoveServiceResetListenerDefWhenOptionSetToTrue() + public function testAddsServiceResetListenerDefWhenOptionSetToTrue() { $container = $this->createContainerFromFile('reset_services'); - $this->assertTrue($container->hasDefinition(ServiceResetListener::class)); + $this->assertEquals((new Definition(ServiceResetListener::class))->addTag('kernel.event_subscriber'), $container->getDefinition(ServiceResetListener::class)); } protected function createContainer(array $data = array()) From 6b74c6a7097d4ecc77830e176abdbad10de03212 Mon Sep 17 00:00:00 2001 From: David Maicher Date: Mon, 16 Oct 2017 21:03:41 +0200 Subject: [PATCH 3/5] update changelog --- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 49fd03165a5b7..064c913180d99 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -60,6 +60,7 @@ CHANGELOG * Added `asset.request_context.base_path` and `asset.request_context.secure` parameters to provide a default request context in case the stack is empty (similar to `router.request_context.*` parameters) * Display environment variables managed by `Dotenv` in `AboutCommand` + * Added new `framework.reset_services_on_terminate` configuration option to enable resetting services tagged with `kernel.reset` on kernel termination 3.3.0 ----- From 02c90ef27352f7b483fe67fb8e7e18df5290b96b Mon Sep 17 00:00:00 2001 From: David Maicher Date: Wed, 18 Oct 2017 23:06:17 +0200 Subject: [PATCH 4/5] review feedback --- .../DependencyInjection/FrameworkExtension.php | 2 +- .../Tests/DependencyInjection/FrameworkExtensionTest.php | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 84e6fbd459b38..a093a60111b30 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -319,7 +319,7 @@ public function load(array $configs, ContainerBuilder $container) } if ($config['reset_services_on_terminate']) { - $container->register(ServiceResetListener::class)->addTag('kernel.event_subscriber'); + $container->register(ServiceResetListener::class)->addTag('kernel.event_subscriber')->setPublic(false); } $this->addAnnotatedClassesToCompile(array( diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index c19b111ee16f0..db4f7fbcf2ceb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -1008,7 +1008,10 @@ public function testDoesNotAddServiceResetListenerDefWhenOptionSetToFalse() public function testAddsServiceResetListenerDefWhenOptionSetToTrue() { $container = $this->createContainerFromFile('reset_services'); - $this->assertEquals((new Definition(ServiceResetListener::class))->addTag('kernel.event_subscriber'), $container->getDefinition(ServiceResetListener::class)); + $this->assertEquals( + (new Definition(ServiceResetListener::class))->addTag('kernel.event_subscriber')->setPublic(false), + $container->getDefinition(ServiceResetListener::class) + ); } protected function createContainer(array $data = array()) From 8ae4629b5725607a799a8d41761522e22dfda51c Mon Sep 17 00:00:00 2001 From: David Maicher Date: Fri, 20 Oct 2017 20:32:42 +0200 Subject: [PATCH 5/5] review feedback: add definition back to xml + rm if needed --- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../Bundle/FrameworkBundle/Resources/config/services.xml | 6 ++++++ .../Tests/DependencyInjection/FrameworkExtensionTest.php | 9 +++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index a093a60111b30..aa3c0d306d4b9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -318,8 +318,8 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('web_link.xml'); } - if ($config['reset_services_on_terminate']) { - $container->register(ServiceResetListener::class)->addTag('kernel.event_subscriber')->setPublic(false); + if (!$config['reset_services_on_terminate']) { + $container->removeDefinition(ServiceResetListener::class); } $this->addAnnotatedClassesToCompile(array( diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml index dea49cbc00538..31ca2075e4a98 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml @@ -74,5 +74,11 @@ + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index db4f7fbcf2ceb..d63f052c84a41 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -999,19 +999,16 @@ public function testCachePoolServices() $this->assertCachePoolServiceDefinitionIsCreated($container, 'cache.def', 'cache.app', 11); } - public function testDoesNotAddServiceResetListenerDefWhenOptionSetToFalse() + public function testRemovesServiceResetListenerDefWhenOptionSetToFalse() { $container = $this->createContainerFromFile('default_config'); $this->assertFalse($container->hasDefinition(ServiceResetListener::class)); } - public function testAddsServiceResetListenerDefWhenOptionSetToTrue() + public function testDoesNotRemoveServiceResetListenerDefWhenOptionSetToTrue() { $container = $this->createContainerFromFile('reset_services'); - $this->assertEquals( - (new Definition(ServiceResetListener::class))->addTag('kernel.event_subscriber')->setPublic(false), - $container->getDefinition(ServiceResetListener::class) - ); + $this->assertTrue($container->hasDefinition(ServiceResetListener::class)); } protected function createContainer(array $data = array())