Edited at

CakePhp3のComponentの使い方まとめ


コンポーネントとは

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を宣言し、その中にコンポーネント名を書いていく。


AuthComponentとCookieComponentの読み込み

 public $components = ["Auth", "Cookie"];


各コンポーネントに引数(配列)を渡す場合、コンポーネント名をキー、引数を配列として$componentsを宣言する。


AuthComponentとCookieComponentの読み込み

 public $components = ["Auth" => [/*AuthComponentの引数*/],

"Cookie" => [/*CookieComponentの引数*/]];

この方法の場合、宣言したクラスのすべてのメソッドで、指定したコンポーネントのインスタンスに$this->コンポーネント名でアクセスすることができる。


loadComponentを使う

loadComponentメソッドで、第1引数にコンポーネント名を指定すると、そのコンポーネントのインスタンスが返ってくる。

第2引数は省略可能だが、配列を渡すとコンポーネントの引数として渡される。


AuthComponentの読み込み

$this->Auth = $this->loadComponent('Auth',[/*引数*/]);



自分でインスタンス化する

自分でインスタンス化することもできる。

まずは、以下の3つのクラスを読み込む。


クラス読み込み

use Cake\Controller\Component;

use Cake\Controller\ComponentRegistry;
use App\Controller\Component\使うコンポーネントのクラス名;

複数のコンポーネントを読み込む場合は、その分だけ使うコンポーネントのクラスをuseしておく。

コンポーネントをインスタンス化する場合には、第1引数にComponentRegistry、第2引数にコンポーネントの引数(省略可能)を渡してインスタンス化する。


AuthComponentの読み込み

$this->Auth = new AuthComponent(new ComponentRegistry(), [/*引数*/]);



コンポーネントを使う

各種の方法でインスタンス化されたコンポーネントのメソッドを呼び出せばいいだけ。

loadComponentや自分でインスタンス化する場合も、$this->コンポーネント名のフィールドにインスタンスを格納しておくと使いやすいと思う。


AuthComponentの使用例

$this->Auth = $this->loadComponent('Auth');

$this->Auth->user('username');//AuthComponentのuserメソッドの呼び出し

作り方についても近いうちにまとめます。

→まとめました

CakePhp3のComponentの作り方まとめ