コンポーネントとは
CakePhp3でコンポーネントとは、各コントローラ間で共通の処理をまとめたもの。
コンポーネント - 3.7
用意されているコンポーネント
よく使われるようなコンポーネントは用意されている。
以下のようなものがある。
- 認証(AuthComponent)
- クッキー(CookieComponent)
- クロスサイトリクエストフォージェリ(CsrfComponent)
- フラッシュ(FlashComponent)
- セキュリティ(SecurityComponent)
- ページ制御(PaginatorComponent)
- リクエストハンドリング(RequestHandlerComponent)
()内はそれぞれのクラス名だが、実際に使用する場合はコンポーネントより前の部分(AuthComponentであれば、Auth)を使うため、これをコンポーネント名として、以下の説明をしていく。
使い方
コンポーネントを読み込む
コンポーネントを読み込む方法には、フィールドで宣言する方法とloadComponentを使う方法、自分でインスタンス化する方法があるが、Controller、Component、Shellのどこから使うかによって、使える方法が異なる。
方法 | Controller | Component | Shell |
---|---|---|---|
loadComponent | OK | NG | NG |
フィールド宣言 | OK | OK | NG |
インスタンス化 | OK | OK | OK |
フィールドで宣言する
使いたいクラスのpublicフィールドとして、配列$componentsを宣言し、その中にコンポーネント名を書いていく。
public $components = ["Auth", "Cookie"];
各コンポーネントに引数(配列)を渡す場合、コンポーネント名をキー、引数を配列として$componentsを宣言する。
public $components = ["Auth" => [/*AuthComponentの引数*/],
"Cookie" => [/*CookieComponentの引数*/]];
この方法の場合、宣言したクラスのすべてのメソッドで、指定したコンポーネントのインスタンスに$this->コンポーネント名
でアクセスすることができる。
loadComponentを使う
loadComponentメソッドで、第1引数にコンポーネント名を指定すると、そのコンポーネントのインスタンスが返ってくる。
第2引数は省略可能だが、配列を渡すとコンポーネントの引数として渡される。
$this->Auth = $this->loadComponent('Auth',[/*引数*/]);
自分でインスタンス化する
自分でインスタンス化することもできる。
まずは、以下の3つのクラスを読み込む。
use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;
use App\Controller\Component\使うコンポーネントのクラス名;
複数のコンポーネントを読み込む場合は、その分だけ使うコンポーネントのクラスをuseしておく。
コンポーネントをインスタンス化する場合には、第1引数にComponentRegistry、第2引数にコンポーネントの引数(省略可能)を渡してインスタンス化する。
$this->Auth = new AuthComponent(new ComponentRegistry(), [/*引数*/]);
コンポーネントを使う
各種の方法でインスタンス化されたコンポーネントのメソッドを呼び出せばいいだけ。
loadComponentや自分でインスタンス化する場合も、$this->コンポーネント名のフィールドにインスタンスを格納しておくと使いやすいと思う。
$this->Auth = $this->loadComponent('Auth');
$this->Auth->user('username');//AuthComponentのuserメソッドの呼び出し
作り方についても近いうちにまとめます。
→まとめました
CakePhp3のComponentの作り方まとめ