yii-event - 在 Yii 中优雅的使用事件 [ 2.0 版本 ]
Yii 中使用一个事件大概是这个样子的
// 绑定事件
$component->on($event::EVENT_NAME, [$object, 'methodNameA']);
$component->on($event::EVENT_NAME, [$object, 'methodNameB']);
// 触发事件
$component->trigger($event::EVENT_NAME, $event);
从上面代码中可以看出如果要触发一个 5 个监听监听的事件,是要入侵 6 行代码的,这显然是不够优雅的,所以写了个组件包将事件与监听绑定写在组件配置文件,调用的时候只需一行代码去触发事件。
源码
环境要求
- Yii > 2.0
安装
$ 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'
guanguans
注册时间:2017-12-11
最后登录:2024-06-25
在线时长:8小时50分
最后登录:2024-06-25
在线时长:8小时50分
- 粉丝4
- 金钱75
- 威望60
- 积分755
共 1 条评论
如何对事件类传入参数呢?
第二个参数是数据的参数
// 传入参数 Yii::$app->event->dispatch(new ExampleEvent(), $data); event(new ExampleEvent(), $data);
class ExampleListener implements ListenerInterface { public function handle(Event $event) { // 使用参数 var_export($event->data); } }