CakePHP1.2でキャッシュが消えない

9月 9th, 2009 admin Posted in CakePHP |

CakePHP の自動キャッシュクリアが効くのは、コントローラ名=モデル名のときだけ : akiyan.com
↑という時用 behaviorsで指定すれば多少ましかもしれないと思った。

たとえばPostモデルってのがあるんだけど、Postモデルにsave()かdelete()があったときにはトップページのtopっていうアクションのビューも削除して欲しいって時には。

post.php

PHP:
  1. var $actsAs = array('ClearCache'=>array('names'=>array('top')));

として

以下のコードをclear_cache.phpとかで/models/behaviorsに保存しておけば

PHP:
  1. <?php
  2. /*
  3. *  キャッシュクリア
  4. */
  5. class ClearCacheBehavior extends ModelBehavior {
  6.  
  7.     var $names = array();
  8.  
  9.     function setup(&$model, $config = array()){
  10.         if(!empty($config['names']))
  11.             $this->names = $config['names'];
  12.     }
  13.  
  14.     function afterSave($created){
  15.         $this->_clear();
  16.     }
  17.  
  18.     function afterDelete(){
  19.         $this->_clear();
  20.     }
  21.  
  22.     function _clear(){
  23.         foreach($this->names as $name){
  24.             clearCache($name);
  25.         }
  26.     }
  27.  
  28. }
  29. ?>

Postモデルが更新されるたびにtopのビューキャッシュもクリアされて
いいと思います

まとめ

あと、CakePHPのビューのキャッシュはアクション名ベース(?)なので?id=99みたいなGETパラメータには対応していないとかもあるので、いっそビューのキャッシュはあきらめるというのも手です。

CakePHP1.2 Behaviorでモデルのメソッドキャッシュを行う : エクスギア Blog

Leave a Reply