diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 15636fb1e616e..5cc15cefb4927 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -995,6 +995,7 @@ private function addCacheSection(ArrayNodeDefinition $rootNode) ->info('Overwrite the setting from the default provider for this adapter.') ->end() ->scalarNode('clearer')->end() + ->booleanNode('keep_in_memory')->defaultFalse()->end() ->end() ->end() ->validate() diff --git a/src/Symfony/Component/Cache/DependencyInjection/CachePoolPass.php b/src/Symfony/Component/Cache/DependencyInjection/CachePoolPass.php index b1af39755e0d6..703cc3ec639b8 100644 --- a/src/Symfony/Component/Cache/DependencyInjection/CachePoolPass.php +++ b/src/Symfony/Component/Cache/DependencyInjection/CachePoolPass.php @@ -13,6 +13,7 @@ use Symfony\Component\Cache\Adapter\AbstractAdapter; use Symfony\Component\Cache\Adapter\ArrayAdapter; +use Symfony\Component\Cache\Adapter\ChainAdapter; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -104,6 +105,18 @@ public function process(ContainerBuilder $container) } unset($tags[0][$attr]); } + + if ($tags[0]['keep_in_memory'] ?? false) { + $container->register($id.'.keep_in_memory', ChainAdapter::class) + ->setDecoratedService($id) + ->addArgument([ + new Definition(ArrayAdapter::class), + new Reference($id.'.keep_in_memory.inner'), + ]); + } + + unset($tags[0]['keep_in_memory']); + if (!empty($tags[0])) { throw new InvalidArgumentException(sprintf('Invalid "%s" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime" and "reset", found "%s".', $this->cachePoolTag, $id, implode('", "', array_keys($tags[0])))); }