Webページ内に、この部分は1時間に一回更新されればいいなど、Viewの一部だけキャッシュしたいと思うことが結構ある。
CakePHP2ではElement単位でキャッシュが可能。そのElementを生成するのに必要なデータの取得等の処理も当然省略できる。
Elementをキャッシュする
$this->Element('user_ranking', [], [
'cache' => true
]);
Elementを生成するときのみに使用する処理の追加
$this->requestAction()を利用することでViewからControllerの任意のアクションを呼び出せる。これをElement内にかくことで、このElementを描画するときのみアクションを実行させることができる。
$ranking = $this->requestAction([
'controller' => 'Users',
'action' => 'getUserRanking'
]);
actionはこんなかんじ。$this->request->is('requested')でrequestAction()からのリクエストを検知できる。
UsersController.php
public function getUserRanking() {
if ($this->request->is('requested')) {
// requestAction()時のみrankingを返す
return $this->UserRanking->getUserRanking();
}
throw new BadRequestException();
}
参考資料
ほぼほぼこちらに書いてある内容です。