before,after系のフックメソッドの動きを再確認
11 月 17, 2008
なんとなくコントローラのbeforeFilter, afterFilter, beforeRender、ヘルパーのafterLayoutあたりの順番が気になったので試してみた。
コントローラ。お分かりの通り、焼いたものにメソッド書いて、ヘルパー追加しただけです。
class UsersController extends AppController { var $name = 'Users'; var $helpers = array('Html', 'Form', 'Second', 'First') ; function beforeFilter(){ echo "beforeFilter<br>"; } function afterFilter() { echo "afterFilter<br>"; } function beforeRender() { echo "beforeRender<br>"; } /** afterRenderなんて存在しないよ\(^o^)/ function afterRender() { echo "afterRender<br>"; } */ function index() { echo "main<br>"; $this->User->recursive = 0; $this->set('users', $this->paginate()); } }
firstHelper。名前は確認用のため適当。そして中身も適当。
class firstHelper extends AppHelper { function afterLayout() { echo "first afterLayout<br>"; } }
secondHelper。↑と同じ。
class secondHelper extends AppHelper { function afterLayout() { echo "second afterLayout<br>"; } }
結果
ふむふむ・・・。
ちなみに、helperの順番を [first],[second]の順にしてみたら、その順番通りだったよ。
色々書いてある場合は、順番に気にしないとーって感じかな。
あと、afterLayoutのあとに、afterFilterが動いてるとはおもわなんだ。
っつーことは、携帯とかの小文字処理とか、エンコード変換とかapp_controllerのafterFilterでやったほうがいいのかな?
afterLayoutのときは、こんな感じで取れたんだけどー
function afterLayout() { $view =& ClassRegistry::getObject('view'); $buffer = $view->output; // $bufferの処理。文字コードとか。 $view->output = $buffer; // 戻す。 }
Controllerの場合は、$this->outputで、表示する内容が取得できる。
試しに、mb_convert_kana($this->output, “R”)かけてみたら、全部全角になった!(echoしてる部分は除きます)
っつーことで、これからはafterFilterでやるようにしよう。
Tags: cakephp

CakePHPのafter,beforeフック系メソッドの順番
「むしの手記。」さんが CakePHPのフック系メソッドの動きについてまとめられていましたので、 さらにComponetnのメソッドも含めて試してみました。 結果はこちら Compornent::initialize(&$c…
トラックバック by おもいついたら書く日記 — 2009 年 6 月 8 日 @ 11:15 AM
[...] むしの手記。 » before,after系のフックメソッドの動きを再確認 [...]
ピンバック by 今週の管理人Bookmark (6/7-6/14) - ElectronicBrain is eating BreakFast — 2009 年 6 月 14 日 @ 11:57 PM