【CakePHP4入門】モデル:ビヘイビアー

CakePHP4のビヘイビアーとは

CakePHP4では、モデル(今回は主にTableクラスを指す)に記述する共通処理をまとめておくのがビヘイビアーの役割になります。
ビヘイビアーを使うことで複数モデルの重複記述を防ぐことができます。

それでは早速ビヘイビアーを使ってみましょう。

CakePHP4でビヘイビアを作成する

ビヘイビアクラスは「Model/Behavior」ディレクトリの下に作成します。
〇〇Behavior.phpというファイル名にして、〇〇Behaviorクラスを作成します。Behaviorを継承することを忘れないようにします。
自分で最初から作るのは大変なので、簡単にbakeコマンドを使うこともできます。

./bin/cake bake behavior Sample

上のコマンドを実行するとSampleBehavior.phpファイルが作成されます。
中身を見てみると次のようになっています(一部抜粋)。

class SampleBehavior extends Behavior
{
    /**
     * Default configuration.
     *
     * @var array
     */
    protected $_defaultConfig = [];
}

ではここに共通処理となるメソッドを作成しましょう。
今回のメソッドは簡単なsampleメソッドとしておきます。

class SampleBehavior extends Behavior
{
    /**
     * Default configuration.
     *
     * @var array
     */
    protected $_defaultConfig = [];

    public function sample($val1,$val2)
    {
        return $val1 + $val2; //引数の合計を返すだけ
    }
}

次にこのビヘイビアのsamleメソッドを使えるようにするために、使いたいモデル(SamplesTableだとします)のinitializeメソッド内に次のように記述します。

$this->addBehavior('Sample');

Controller側から以下のようにモデルのメソッドを呼び出すときと同じように、呼び出すことができるようになります。

$val = $this->Samples->sample(10,20);

(SamplesはTable名です)

上の例だと変数$valに30が入っていることが分かります。
他のモデルでもこのビヘイビアを使いたければ、そのモデルのinitializeメソッドに

$this->addBehavior('Sample');

を記述してあげればよいです。

もし全てのモデルで共通で使いたい場合には、
「class BaseTable extends Table」といったようなクラスを一つ作成し、そのinitializeメソッドにaddBehaviorの記述をしておき、
他のTableクラスはBaseTableを継承するようにすればよいでしょう。