読者です 読者をやめる 読者になる 読者になる

Software Engineer and Web Developer's Diary

1年後の自分に向けて

cakephp1.2でcacheを使う

cakephp1.1の時と同じように(ちょっと違うけど)キャッシュの設定をする。

  1. core.phpの設定
  2. Cache.checkのコメントを削除
    Configure::write('Cache.check', true);
  3. controllerの設定
  4. プロパティに追加(※Cacheヘルパーを指定しないと動かない)
    var $helpers = array('Html', 'Cache');
    アクションに追加(※trueだと動かない)
    $this->cacheAction = '+12 hours';

これでキャッシュが有効になる。

以下はCacheヘルパーを指定しないといけないということに気づくまでのメモ。

ソースを追ってみると、cake/libs/view/view.phpの665行目のisset($this->loaded['cache'])がfalseな為キャッシュが無効と判定されている。 [php] if (isset($this->loaded['cache']) && *1 && (Configure::read('Cache.check') === true)) { if (is_a($this->loaded['cache'], 'CacheHelper')) { $cache =& $this->loaded['cache'];

            if ($cached === true) {
                $cache->view = &$this;
            }

            $cache->base = $this->base;
            $cache->here = $this->here;
            $cache->helpers = $this->helpers;
            $cache->action = $this->action;
            $cache->controllerName = $this->name;
            $cache->layout   = $this->layout;
            $cache->cacheAction = $this->cacheAction;
            $cache->cache($___viewFn, $out, $cached);
        }
    }

[/php]

loaded['cache']って何?って調べると読み込まれているヘルパーのことだったので、ヘルパーにCacheを指定すると無事キャッシュが有効なりました。 よかった、ぜったいバグだと思ってた。

*1:$this->cacheAction != false