ビューキャッシュを使うとかなりパフォーマンスが向上するらしい。
静的なページには物凄く簡単に使える。
使い方もすぐ出てくる。
core.phpのConfigure::write(’Cache.check’, true);にして、
使いたいコントローラで、ヘルパーにキャッシュを追加して、var $helpers = array(’Cache’);
var $cacheAction = array(’index’ => 86400);って変数にアクションと保持する時間を決めてあげる。
問題は、キャッシュしたくない部分。
マニュアルを見ると、
<cake:nocache>で囲めばいいよと書いてあるだけ。
たしかに、出来るキャッシュファイルを見ると、囲った部分はこのまま残ってるから効いてるんだけど、
キャッシュがあるとアクションが呼ばれないので、上記の例だと$this->setで設定していた$newProductsがないのでエラーが出る。
じゃあどう値を取得すればいいのかなと思って、調べてみた。
beforeValidateなるコールバックメソッドがあった。
model内にあると、validateの直前に呼んでくれるようだ。
model内でvalidate前に値を加工したいときは便利。
$this->dataに値が入ってるので、加工する。
1.1にもあったのかもしれないけど、1.2はModelにcounterCacheって便利な機能がある。
modelがアソシエーションしてるときに、model名_countってカラムを用意しといて、
bindModelのときに’counterCache’ => trueを指定しとくと、勝手に数を数えて増減を登録してくれらしい。
詳しい説明はここにある。
使ってみたけど、たしかに便利。
でもこれを使ってると、bindModel($params, $reset = true)の$reset=falseが効かなくなるのね。
なので、うまくつかわないと$this->paginateが使えなくなっちゃうね。
※この記事参照
僕の書き方が悪かったんだけど、いきなり動かなくなるからあせった。
ソース読んでないからなんともいえないけど、両立する方法もあるのかな。
※追記
使いたいときだけ下記のようにmodel内でbindModelしてつかってた。
で、save()の時はうまく動いてたんだけど、del()の時はうまく動かなかった。
modelのソースを見たら、下記のようにカウンターキャッシュのメソッド(updateCounterCache())を読んでた。
del()の時は、delete分の前にselectを読んでるので、その時点でbindModelの情報がなくなってたみたい。
$this->belongsToが空になってた。
なので、
としたら、うまくカウンターキャッシュが動いてくれた。
ほんとかどうか自信がないや。
使い方が間違ってるのかもしれない。
HTMLコーディングしてて、ファイルをPHPにしてプレビューしたら、エラーが出たよ。
調べてみたら、どうやら一行目のXML宣言がまずかったみたい。
こいつの?の部分をPHPが認識してしまって、エラーが起きるみたいだ。
なので、echoで呼ぶようにしたら問題無く表示されました。
やはりデザイナーがPHPをいじると、しょうもない所でつまづくなぁ。
外部ファイルをincludeしたい場合に、絶対パスではなくて、サイトルートからのパスで取得したい場面に出くわしました。調べたら、PHPにはサイトのルートを返してくれる便利なものがあるんですね。
こいつで一発でした。
覚えておこうっと。