cakephp2.doc_074
最終投稿日:2019年11月20日
例えば 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'
);
}
}
?>