Yii-events
提供:Dev Guides
Yii-イベント
*events* を使用して、特定の実行ポイントでカスタムコードを挿入できます。 イベントにカスタムコードを添付できます。イベントがトリガーされると、コードが実行されます。 たとえば、新しいユーザーがWebサイトに登録すると、ロガーオブジェクトが *userRegistered* イベントをトリガーする場合があります。 クラスがイベントをトリガーする必要がある場合は、yii \ base \ Componentクラスから拡張する必要があります。
イベントハンドラはPHPコールバックです。 次のコールバックを使用できます-
- 文字列として指定されたグローバルPHP関数。
- 匿名関数。
- ['ClassName'、 'methodName']など、文字列としてのクラス名とメソッドの配列
- 文字列としてのオブジェクトとメソッドの配列。たとえば、[$ obj、 'methodName']
- ステップ1 *-ハンドラーをイベントにアタッチするには、 yii \ base \ Component
- on()*メソッドを呼び出す必要があります。
$obj = new Obj;
//this handler is a global function
$obj->on(Obj::EVENT_HELLO, 'function_name');
//this handler is an object method
$obj->on(Obj::EVENT_HELLO, [$object, 'methodName']);
//this handler is a static class method
$obj->on(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
//this handler is an anonymous function
$obj->on(Obj::EVENT_HELLO, function ($event) {
//event handling logic
});
1つ以上のハンドラーをイベントに添付できます。 アタッチされたハンドラーは、イベントにアタッチされた順に呼び出されます。
- ステップ2 *-ハンドラーの呼び出しを停止するには、 yii \ base \ Event
- $ handledプロパティ*を true に設定する必要があります。
$obj->on(Obj::EVENT_HELLO, function ($event) {
$event->handled = true;
});
- ステップ3 *-ハンドラーをキューの先頭に挿入するには、 yii \ base \ Component
- on()*を呼び出して、4番目のパラメーターにfalseを渡します。
$obj->on(Obj::EVENT_HELLO, function ($event) {
//...
}, $data, false);
- ステップ4 *-イベントをトリガーするには、 yii \ base \ Component
- trigger()*メソッドを呼び出します。
namespace app\components;
use yii\base\Component;
use yii\base\Event;
class Obj extends Component {
const EVENT_HELLO = 'hello';
public function triggerEvent() {
$this->trigger(self::EVENT_HELLO);
}
}
- ステップ5 *-ハンドラーをイベントから切り離すには、 yii \ base \ Component
- off()*メソッドを呼び出す必要があります。
$obj = new Obj;
//this handler is a global function
$obj->off(Obj::EVENT_HELLO, 'function_name');
//this handler is an object method
$obj->off(Obj::EVENT_HELLO, [$object, 'methodName']);
//this handler is a static class method
$obj->off(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
//this handler is an anonymous function
$obj->off(Obj::EVENT_HELLO, function ($event) {
//event handling logic
});