##使い方
app/Controller/Component配下にComponentクラスを継承したクラスを作成する。
<?php
//読み込み忘れずに
App::uses('Component', 'Controller');
//クラス名にはComponentをつける
class FooComponent extends Component {
public function bar($one,$two){
return $one + $two;
}
}
通常のComponent同様、コントローラーから使用できる。
$componentsに使用するコンポーネントを定義する。「$this->コンポーネント名->メソッド」で呼び出す。
(定義する際も、呼び出す際もクラス名からComponentを除いて記述する。)
<?php
App::uses('AppController', 'Controller');
class HogesController extends AppController {
public $components = ['Foo'];
public function index(){
$res = $this->Foo->bar(5,9);
}
##各種のコールバック
initialize()もしくは、startup()でControllerを取得してアクセスすると便利。
RequestクラスやControllerのさまざまなメソッドが利用できる。
class HogeComponent extends Component {
public $controller;
public $request;
//beforeFileterの前に実行される
public function initialize(Controller $controller){
}
//beforeFileterの後に実行される
public function startup(Controller $controller){
$this->controller = $controller;
$this->request = $controller->request;
}
//beforeRenderの前に実行される
public function beforeRender(Controller $controller){
}
//afterRenderの後に実行される
public function shutdown(Controller $controller){
}
}
##コンポーネントからモデルを使用する
$HogeModel = ClassRegistry::init('HogeModel');
$data = $HogeModel->find('all');
##コンポーネント内で他のコンポーネントを使う
コントローラーと同じ方法でコンポーネントを使うことができる。
用意されているコンポーネントも自作コンポーネントも使える。
public $components = array('Auth');
public function hoge() {
$user = $this->Auth->user();
}
ただし、コンポーネント内から使われるコンポーネントのコールバック関数は実行されない。