From 8744443b497764f5ab6fd4e8fc3af31832f4c3e7 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 15 Mar 2016 12:55:06 +0100 Subject: [PATCH] [Cache] Restrict flushes to namespace scopes --- src/Symfony/Component/Cache/Adapter/ApcuAdapter.php | 4 +++- src/Symfony/Component/Cache/Adapter/DoctrineAdapter.php | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php b/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php index 3b8f7e8ade0b..621899d904ef 100644 --- a/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php @@ -50,7 +50,9 @@ protected function doHave($id) */ protected function doClear($namespace) { - return apcu_clear_cache(); + return isset($namespace[0]) && class_exists('APCuIterator', false) + ? apcu_delete(new \APCuIterator(sprintf('/^%s/', preg_quote($namespace, '/')), APC_ITER_KEY)) + : apcu_clear_cache(); } /** diff --git a/src/Symfony/Component/Cache/Adapter/DoctrineAdapter.php b/src/Symfony/Component/Cache/Adapter/DoctrineAdapter.php index f89148a7871f..26dd8e3a86d8 100644 --- a/src/Symfony/Component/Cache/Adapter/DoctrineAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/DoctrineAdapter.php @@ -22,8 +22,9 @@ class DoctrineAdapter extends AbstractAdapter public function __construct(CacheProvider $provider, $defaultLifetime = 0, $namespace = '') { - parent::__construct($namespace, $defaultLifetime); + parent::__construct('', $defaultLifetime); $this->provider = $provider; + $provider->setNamespace($namespace); } /** @@ -47,7 +48,11 @@ protected function doHave($id) */ protected function doClear($namespace) { - return $this->provider->flushAll(); + $namespace = $this->provider->getNamespace(); + + return isset($namespace[0]) + ? $this->provider->deleteAll() + : $this->provider->flushAll(); } /**