
Yii 中使用一個事件大概是這個樣子的
// 綁定事件
$component->on($event::EVENT_NAME, [$object, 'methodNameA']);
$component->on($event::EVENT_NAME, [$object, 'methodNameB']);
// 觸發事件
$component->trigger($event::EVENT_NAME, $event);
從上面代碼中能夠看出若是要觸發一個 5 個監聽監聽的事件,是要入侵 6 行代碼的,這顯然是不夠優雅的,因此寫了個組件包將事件與監聽綁定寫在組件配置文件,調用的時候只需一行代碼去觸發事件。
源碼
環境要求
安裝
$ composer require guanguans/yii-event -vvv
配置
...
'components' => [
...
'event' => [
'class' => \Guanguans\YiiEvent\Event::className(),
'listen' => [
// 事件類名
\app\events\ExampleEvent::className() => [
// 監聽該事件監聽的類名
\app\listeners\ExampleListener::class,
],
],
],
...
],
...
使用示例
建立事件 app\events\ExampleEvent.php
namespace app\events;
use yii\base\Event;
class ExampleEvent extends Event
{
public $name = 'example';
}
建立監聽 app\listeners\ExampleListener.php
namespace app\listeners;
use Guanguans\YiiEvent\ListenerInterface;
use yii\base\Event;
class ExampleListener implements ListenerInterface
{
public static function handle(Event $event)
{
// to do something.
var_export($event->name);
}
}
觸發事件
Yii::$app->event->dispatch(new ExampleEvent());
// or
event(new ExampleEvent());
驗證結果
'example'