CakePHPでは、イベントという処理をフックする仕組みを提供しているが、baserCMSでは、プラグインにてそのイベントを簡単に実装できるように機能を拡張している。
イベント発火する際、イベントを特定するキーの作成が必要となるが、BcEventDispatcherTrait
を利用すると、レイヤー名(Model / Controller / View / Helper)とプラグイン名、クラス名を考慮したイベントキーを自動生成する事ができる。
# SitesTable にて、beforeFind を指定した場合のイベントキー
Model.BaserCore.Sites.beforeFind
利用する場合には、クラスに BcEventDispatcherTrait
を定義し、dispatchLayerEvent
を呼び出す。
// PagesTable クラスの場合、Model.BaserCore.Pages.beforeCopy としてイベントキーが生成される
$event = $this->dispatchLayerEvent('beforeCopy', [
'data' => $page,
'id' => $page->id
]);
イベント処理の登録は、CakePHPの仕様に合わせて登録する事もできるが、イベントリスナークラスを作成する事で、インスタンスの生成、イベントキーとコールバック処理の紐付けを自動化する事ができる。
プラグイン名とレイヤー名を絡めたクラス名にします。
{PluginName}{LayerName}EventListener
レイヤー名を省略してイベントキーを設定します。
public $events = ['BaserCore.Users.BeforeRender']
イベントキーよりドット(.)を除いてロウワーキャメルケースにしたメソッド名で定義します。
public function baserCoreUsersBeforeRender(Event $event)
{
}