2017-01-16 12 views
1

こんにちは、symfonyのキャッシュコンポーネントからすべてのキャッシュデータをクリアする方法はありますか?展開後のSymfonyクリアキャッシュコンポーネント

ここhttp://symfony.com/doc/current/components/cache/cache_pools.html底面には、次のとおりです。(私はコンソールコマンドを必要とする)

$cacheIsEmpty = $cache->clear(); 

とコマンド:

bin/console cache:clear 

は、私は私ができるコンソールコマンドの魔女のためにlookigい手つかず

このキャッシュを保持します毎回* .shスクリプトを呼び出してください。

EDIT(例):

デフォルトの入力オプション:

$cache = new FilesystemAdapter(); 
$defaultInputOptions = $cache->getItem('mainFilter.defaultInputOptions'); 

if (!$defaultInputOptions->isHit()) { 
     // collect data, format etc. 
     $expiration = new \DateInterval('P1D'); 
     $defaultInputOptions->expiresAfter($expiration); 
     $cache->save($defaultInputOptions); 
} else { 
     return $defaultInputOptions->get(); 
} 

しかし、私は何かを変更した場合のデータを収集し、フォーマットなど " (git pull、composer install、bin/console cache:clear ...)サーバ上の新しいバージョンはまだ有効なキャッシュ(1日)を持っており、そこからデータを取得します...

+0

なぜ./bin/consoleキャッシュ:クリアでは不十分ですか? – sensorario

+0

質問は更新 - 例と説明です。 –

答えて

1

あなたはsymfonyによって使用されるSymfony\Component\HttpKernel\CacheClearer\CacheClearerInterfaceを実装したいネイティブキャッシュ任意のサービスを行うことができます明らか

use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface; 
use Symfony\Component\Cache\Adapter\AdapterInterface; 

final class SomeCacheClearer implements CacheClearerInterface 
{ 
    private $cache; 

    public function __construct(AdapterInterface $filesystemAdapter) 
    { 
     $this->cache = $filesystemAdapter; 
    } 

    public function clear($cacheDir) 
    { 
     $this->cache->clear(); 
    } 
} 

コンフィグは、タグによって行われkernel.cache_clearerを

cache_provider.clearer: 
    class: AppBundle\Path\SomeCacheClearer 
    arguments: 
     - 'my_app_cache' 
    tags: 
     - { name: kernel.cache_clearer } 

EDIT:サービスとしてのキャッシュに関する精度:

あなたのキャッシュサービスは、その

my_app_cache: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 

それとも、名前空間とTTL

my_app_cache: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 
    arguments: 
     - 'my_cache_namespace' 
     - 30 #cache ttl (in seconds) 

を指定したいのであれば、あなたがなければならないように定義することができnot use

$cache = new FilesystemAdapter(); 

しかし、サービス終了時に注入

$cache = $this->get('my_app_cache'); 
+0

こんにちはTHXの答えです。私は 'use Symfony \ Component \ Cache \ Adapter \ AdapterInterface;'を追加し、引数に '@ cache.app'を付けなければなりません。しかし、それは動作しません - エラーも 'bin/console cache:clear'の後でも有効なキャッシュからデータがロードされます –

+0

メソッドclear()にブレークポイントまたは' var_dump( "); exit;それは呼ばれていますか? – goto

+0

コンソールに 'called'と表示されています。 –

0

は - 編集をすれば良いだけservices.ymlおよび追加:

appbundle.cachecomponent.clearall: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 
    tags: 
     - { name: kernel.cache_clearer } 

私はそれが適切なソリューションであると思いますので、私はsymfonyの中に新しいです。

関連する問題