cakephp2.doc_074
R e i - D r e a m
for Laravel
TOP > CakePHP2 > Class関連(EventManager)
Guest
login

最終投稿日:2019年11月20日

Class関連(EventManager)
CakePHP2.x
例えば Controller から View を表示する前になんらかの処理を行うという拡張をコールバックを
 使った方法で行った場合は下記のようになります。

    public function beforeRender(){
        //処理
    }


CakePHP2.1 から採用された EventManager を使う事で上記の問題をシンプルにできます。
Controller から View を表示する前になんらかの処理を行う場合、
 以下のようなコードを bootstrap.php や任意のコントローラーの中など好きな場所に書けば動作します。

    App::uses('CakeEventManager', 'Event');
    function hoge() {
         //処理
        return true;
    }

    CakeEventManager::instance()->attach(
        //hoge 関数を処理
        'hoge',
        //トリガー。レンダーの手前に実行
        'Controller.beforeRender'
    );

    メモ)
        コールバックとなる hoge メソッドは、クラスの中にいてはダメです。
        例えばあるコントローラの index にだけ hoge メソッドを適用したいなら
         index メソッド内に以下の呼び出しを記述する。

            CakeEventManager::instance()->attach(
                'hoge',
                'Controller.beforeRender'
            );

        hoge メソッドに関してはクラスの上段に記述するか bootstrap.php に記述する。

            App::uses('CakeEventManager', 'Event');
            function hoge() {
                 //処理
                return true;
            }
        また、全てのビューに対して適応するなら全て bootstrap.php に記述する事もできる。


例)コントローラに記述
    <?php
        App::uses('AppController', 'Controller');
        App::uses('CakeEventManager', 'Event');

        function hoge(){
            echo "hoge....";
            return true;
        }

        class TestsController extends AppController {

            public $name = "Tests";
            public $uses = array('User');
            public $components = array("Session");
            public $helpers = array('Html', 'Form');
            
            public function beforeFilter(){
                parent::beforeFilter();
                $this->Auth->allow('*');

            }

            function index(){

                CakeEventManager::instance()->attach(
                    'hoge',
                    'Controller.beforeRender'
                );
            }
            
        }
    ?>
            
ログインしてコメントを残そう!!


きっぷる