目录
一:场景介绍
二:事件监听
三:配置订阅
一:场景介绍
在项目开发中有很多这样的场景,比如用户注册完了,需要通知到第三方或者发送消息。用户下单了,需要提示给客服等等。这些场景都有一个共同的特点是主流程和通知流程可以完全分离。通知流程是成功和失败不能影响到主流程。那么在thinkphp6中怎么实现这样的逻辑呢?可以使用事件订阅和事件监听。
二:事件监听
事件类可作为保存与事件相关信息的容器,如没有额外需求可以不需要定义
事件系统的所有操作都通过think\facade\Event类进行静态调用
1:配置监听
// 在event.php中绑定事件标识
'bind' => [
'order_info' => \app\event\Order::class
],
// 一个事件可以有很多不相关的监听器
'listen' => [
'order_info' => [
\app\listener\ListenerUser::class,
\app\listener\ListenerGoods::class
]
],
// 或者可以这样动态绑定
Event::bind(['order_info' => \app\event\Order::class]);
// 以下方式都可以触发事件
Event::trigger('order_info');
Event::trigger(\app\event\Order::class);
Event::trigger(new \app\event\Order('Order初始化'));
不定义事件类时
'bind' => [
],
'listen' => [
'order_info' => [
\app\listener\ListenerUser::class,
\app\listener\ListenerGoods::class
]
],
// 以下方式触发事件
Event::trigger('order_info');
// 这样就可以触发事件
Event::trigger(\app\event\Order::class);
Event::trigger(new \app\event\Order('Order初始化'));
三:配置订阅
我们以用户注册为例,详细介绍了配置流程。这里的场景是我们需要在用户注册完,把用户信息推送到第三方平台。
1:首先注册事件订阅者
app目录下的event.php,我们定义一个用户的类,里面可以写和用户有关的订阅方法
也可以动态注册
Event::subscribe(\app\subscribe\SubscribeUser::class);
这里的类,可以定义多个,每个订阅类在这里注册以后,都可以实现监听
2: 写用户注册的推送逻辑
通过事件订阅机制,在一个监听器中监听多个事件,这里用户注册完可以定义推送逻辑,还可以定义其他逻辑,多个方法都可以监听到。
3:员工注册事件
event('delete_user', ['ids' => $idArr,'user_arr' => $listArr]);
或者
Event::trigger('delete_user');