アクションキャッシュを明示的に削除する方法
アクションキャッシュを使用するとアクションのレンダリング結果がキャッシュされるようになりますが、このキャッシュは内部的なデータの更新などには全く依存せず、単に作成された時刻から●秒、という生存期間でキャッシュされます。
しかし、データの更新をすぐに反映させたい場合、アクションキャッシュを削除してやる必要があります。
symfony プログラム内からアクションキャッシュを削除する方法については、Definitive Guide のキャッシュの章に説明があります。
- symfony 1.x legacy website Removing Items from the Cache
具体的にはコンテキストのキャッシュマネージャから remove メソッドを呼び出すか、キャッシュディレクトリに対して sfFileCache オブジェクトを作成して removePattern メソッドを呼び出します。
以下、Definitive Guide にあるサンプルコードの抜粋です。
<?php $cacheManager = $this->getContext()->getViewCacheManager(); $cacheManager->remove('user/list'); ?>
<?php $frontend_cache_dir = sfConfig::get('sf_cache_dir').DIRECTORY_SEPARATOR.'frontend'.DIRECTORY_SEPARATOR.'prod'.DIRECTORY_SEPARATOR.'template'; $cache = new sfFileCache(array('cache_dir' => $frontend_cache_dir)); // Use the same settings as the ones defined in the frontend factories.yml $cache->removePattern('**'); ?>
後者の例は、アプリケーションを横断してキャッシュを削除する場合です。
(バックエンドから、フロントエンド側のキャッシュを削除)
★Definitive Guideのソースだと symfony 1.2 で動作しなかったので修正しました。