开门见山
事件监听:一个类做一个操作
事件订阅:一个类做多个操作
事件监听
- 创建监听类
php think make:listen UserLogin
php think make:listen UserLogout
创建后多一个 listener 目录
- 监听类处理方法
class UserLogin
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
dump('listen-login:' . $event);
}
}
class UserLogout
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
dump('listen-logout:' . $event);
}
}
- 在 event.php 里配置事件监听
'listen' => [
'user_login' => [
app\admin\listener\UserLogin::class
],
'user_logout' => [
\app\admin\listener\UserLogout::class
]
],
- 测试接口触发事件
public function test4()
{
event('user_login', '测试');
event('user_logout', '测试');
}
结果:
接下来换事件订阅实现同样的操作
事件订阅
同样操作,先创建订阅类
php think make:subscribe UserSubscribe
创建后多一个订阅类
event.php 文件里配置事件订阅
'subscribe' => [
app\subscribe\UserSubscribe::class
],
这里只介绍手动绑定,绑定有两种写法
方式一
事件方法写在订阅类里面
use think\Event;
class UserSubscribe
{
//绑定订阅事件函数
public function subscribe(Event $event)
{
$event->listen('user_login', [$this,'userLogin']);
$event->listen('user_logout',[$this,'userLogout']);
}
public function userLogin($event)
{
dump('subscribe-login:' . $event);
}
public function userLogout($event)
{
dump('subscribe-logout:' . $event);
}
}
触发结果
方式二
订阅类只做绑定,事件方法写到自定义事件类里
- 创建事件类
php think make:event UserEvent
- 修改订阅类
use app\event\UserEvent;
use think\Event;
class UserSubscribe
{
//绑定订阅事件函数
public function subscribe(Event $event)
{
$event->listen('user_login', [UserEvent::class,'userLogin']);
$event->listen('user_logout',[UserEvent::class,'userLogout']);
}
}
- 事件类
class UserEvent
{
public function userLogin($event)
{
dump('subscribe-event-login:' . $event);
}
public function userLogout($event)
{
dump('subscribe-event-logout:' . $event);
}
}
还是刚才的测试方法
public function test4()
{
event('user_login', '测试');
event('user_logout', '测试');
}
触发结果