Cakephp2.xで、AppControllerにsetした共通変数を全コントローラーで呼び出す
タイトル通りの内容を覚え書きする。(タイトル長いけどこれ以上要約できない!)
やりたかったこと
バージョン表記
システムの最新バージョンを、全ページのフッターにちょこちょこと表示したかった。
で、
public function version(){ $this->set('releasenotes', $this->Releasenote->find('first',array('order'=>array('ID'=>'desc')))); } |
みたいな関数をAppControllerに作ったんだけど、他Controllerでは$releasenotesがセットされない。
実現方法
こういう場合は、CakePHPが用意している共通Public関数の中に処理を仕込みましょう。
- beforeFilter
- beforeRender
- afterFilter
これからはそれぞれ実行タイミングが違う。読んで時の如くで、一番最初、Action Filterが動くよりも先に実行されるのがbeforeFilter。ページViewのレンダリングの前に実行されるのがbeforeRender。最後、ページフィルターよりも後に実行されるのがafterFilter。
広告
今回は、Viewで出したいので、最後のafterFilterより前の2つであればどちらでも大丈夫そうだ。
実行結果
[dacelo@space app]$ vi Controller/AppController.php
public function beforeRender(){ //バージョン出力 $this->set('releasenotes', $this->Releasenote->find('first',array('order'=>array('ID'=>'desc')))); } |
これでめでたく、どのViewでもが出力できるようになりました。