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でもが出力できるようになりました。

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *