before,after系のフックメソッドの動きを再確認このエントリをはてなブックマークに追加

11 月 17, 2008

なんとなくコントローラのbeforeFilter, afterFilter, beforeRender、ヘルパーのafterLayoutあたりの順番が気になったので試してみた。

コントローラ。お分かりの通り、焼いたものにメソッド書いて、ヘルパー追加しただけです。

<?php
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。名前は確認用のため適当。そして中身も適当。

<?php
class firstHelper extends AppHelper {
    function afterLayout() {
        echo "first afterLayout<br>";
    }
}
?>

secondHelper。↑と同じ。

<?php
class secondHelper extends AppHelper {
    function afterLayout() {
        echo "second afterLayout<br>";
    }
}
?>

結果

ふむふむ・・・。
ちなみに、helperの順番を [first],[second]の順にしてみたら、その順番通りだったよ。
色々書いてある場合は、順番に気にしないとーって感じかな。

あと、afterLayoutのあとに、afterFilterが動いてるとはおもわなんだ。
っつーことは、携帯とかの小文字処理とか、エンコード変換とかapp_controllerのafterFilterでやったほうがいいのかな?

afterLayoutのときは、こんな感じで取れたんだけどー

<?php
function afterLayout() {
  $view =& ClassRegistry::getObject('view'); 
  $buffer = $view->output;
  // $bufferの処理。文字コードとか。

  $view->output = $buffer;  // 戻す。
}
?>

Controllerの場合は、$this->outputで、表示する内容が取得できる。

試しに、mb_convert_kana($this->output, “R”)かけてみたら、全部全角になった!(echoしてる部分は除きます)
っつーことで、これからはafterFilterでやるようにしよう。

Categories: cakephp
Tags:

2 件のコメント »

このコメント欄の RSS フィードトラックバック URL

  1. CakePHPのafter,beforeフック系メソッドの順番

    「むしの手記。」さんが CakePHPのフック系メソッドの動きについてまとめられていましたので、 さらにComponetnのメソッドも含めて試してみました。 結果はこちら Compornent::initialize(&$c…

    トラックバック by おもいついたら書く日記 — 2009 年 6 月 8 日 @ 11:15 AM

  2. [...] むしの手記。 » before,after系のフックメソッドの動きを再確認 [...]

    ピンバック by 今週の管理人Bookmark (6/7-6/14) - ElectronicBrain is eating BreakFast — 2009 年 6 月 14 日 @ 11:57 PM

コメントをどうぞ