CakePHP3でコンポーネント(共通クラス)を使う

CakePHP3ですべてのコントローラー内で利用できる共通クラスというか共通関数の作成方法です。普通のPHPでいうところのincludeとかrequireに相当する機能というと語弊がありますが、そんな感じのものです。
よっぽど理由がない限り、

src/Controller/Component

以下に作成します。
最低限の要素は以下のようになります。namespaceとuseでコンポーネントを使えるようにします。このクラスはComponentクラスの継承となるので、クラス名は任意のものでよいです。まずはTestComponent.phpなるものを作ってみましょう。

<?php
namespace App\Controller\Component;

use Cake\Controller\Component;

class TestComponent extends Component {
     public function testComponent() {
          return "test OK!";
     }
}

コンポーネントを作成したら次に任意のコントローラーで呼び出します。コンポーネントはプロパティーで呼び出します。内部的にすでに仕組みが組み込まれているのでこれだけでOKだということです。余計なこと考えなくていいのがよい。

<?php
namespace App\Controller;

use App\Controller\AppController;

class TopsController extends AppController
{
    public $components = ['Test']; ←これ

    public function index()
    {
        $test = $this->Test->testComponent(); ←これ
        debug($test);

        $this->render('index');
    }
}

$thisですでにオブジェクトが作られているのでそのまま

$test = $this->Test->testComponent();

で引っ張ってこれるのがいいですね。newとかしなくていいです。
関数を使う際はコンポーネントのファイルのキャメルケースの手前部分だけです。上記の例ではTestComponent.phpなので、Testの部分だけになります。

public $components = ['Test'];

debugの値に「test OK!」が入ってきたら完了。

Last update: 2016.07.14 (木)