コンポーネント
主なコンポーネントの種類
CakePHP3で用意されている主なコンポーネントを記載します。
- 認証(AuthComponent)
- クッキー(CookieComponent)
- クロスサイトリクエストフォージェリ(CsrfComponent)
- フラッシュ(FlashComponent)
- セキュリティ(SecurityComponent)
- ページ制御((PaginatorComponent)
- リクエストハンドリング(RequestHandlerComponent)
コンポーネントとコントローラのメソッドの実行順序
コンポーネントとコントローラのメソッドの実行順序は、以下のようになります。
Controllerのinitialize()
↓
ComponentのbeforeFilter()
↓
ControllerのbeforeFilter()
↓
Componentのstartup()
↓
Controllerのaction
↓
ComponentのbeforeRender()
↓
ControllerのbeforeRender()
↓
Componentのshutdown()
↓
ControllerのafterFilter()
Componentから呼び出し元のControllerのオブジェクトを取得する
Componentから呼び出し元のControllerのオブジェクトを取得するには、getController()メソッドで取得することが可能です。
$this->controller = $this->_registry->getController();
コンポーネントのロード時に引数を渡す
コンポーネントのロード時に引数を渡す場合は、第二引数に配列で指定します。
以下では、TestComponentをロードする際を例にしています。
呼び出し元
コンポーネントをフィールドで宣言している場合
public $components = [ 'Test' => [ 'message' => 'コンポーネントに渡す引数です。', 'today' => '2017-06-01' ], ];
loadComponentを使っている場合
$this->Test = $this->loadComponent( 'Test', [ 'message' => 'コンポーネントに渡す引数です。', 'today' => '2017-06-01' ] );
自分でインスタンス化する場合
$this->Test = new TestComponent( new ComponentRegistry(), [ 'message' => 'コンポーネントに渡す引数です。', 'today' => '2017-06-01' ] );
コンポーネント側
コンポーネント側で引数を受け取る場合は、initialize()で受け取ることができます。
public function initialize(array $config) { var_dump($config); } ■引数の中身 array(2) { ["message"]=> string(45) "コンポーネントに渡す引数です。" ["today"]=> string(10) "2017-06-01" }
------------------------------
作成日:2016年07月09日
更新日:2018年01月27日
------------------------------