Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

ビヘイビア

ビヘイビアとはテーブルに追加できる便利部品
以下を参照した。
ビヘイビアー - 3.x

ビヘイビアをテーブルに追加

amespace App\Model\Table;

use Cake\ORM\Table;

class HogesTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
    }
}

追加設定

namespace App\Model\Table;

use Cake\ORM\Table;

class HogesTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp', [
            'events' => [
                'Model.beforeSave' => [
                    'created_at' => 'new',
                    'modified_at' => 'always'
                ]
            ]
        ]);
    }
}

removeBehaviorで削除。

既存のビヘイビア

  1. CounterCache
  2. Timestamp
  3. Translate
  4. Tree

ビヘイビアの作成

namespace App\Model\Behavior;

use Cake\ORM\Behavior;

class HogeBehavior extends Behavior
{
 public function initialize(array $config)
 {
    // 何らかの初期化処理
 }
}

ビヘイビアを追加するとビヘイビアーのパブリックメソッドが、追加されたテーブルオブジェクトに「ミックスイン」メソッドとして追加される。

  1. 複数追加したビヘイビアが同じメソッドを持つと例外発生。
  2. テーブルが同じメソッドを持つとそちらが呼ばれる。

公開したくないビヘイビアのpublicメソッドがあればimplementMethods設定で隠せる。

ビヘイビアでコールバックを実装すればミックスインされるのでイベントを処理できる。

    public function beforeSave(Event $event, EntityInterface $entity)
    {
        $this->slug($entity);
    }

読み込まれたビヘイビアの確認

$table->behaviors()->loaded();
$table->behaviors()->has('CounterCache');
$table->behaviors()->get('CounterCache');

ロードされたビヘイビアの再構成

BehaviorRegistry::getとconfigでできるらしい。