{{wikiTitle}}
事件
目录:
事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性
定义事件
系统事件存放在listener目录下,创建一个登录后执行的事件,创建文件:app/listener/user/UserLogin.php
<?php
namespace app\listener\user;
class UserLogin
{
public function __construct()
{
}
public function handle()
{
//这里写事件执行的逻辑
}
}
配置事件
在根目录app/event.php文件的listen数组中配置
<?php
return [
//事件注入
'listen' => [
'user.login'=>[\app\listener\user\UserLogin::class],
],
];
调用事件
使用event函数调用事件
event('user.login')
和event使用效果一样
use think\facade\Event;
Event::event('user.login');
触发事件,返回事件的第一个有效返回值,
一个事件后面可以对应多个类来执行,使用当前方法只会返回第一个事件类中的 handle方法中的返回值
use think\facade\Event;
Event::until('user.login');
触发事件,返回所有事件类的返回值
use think\facade\Event;
Event::trigger('user.login');
内置事件
return [
'bind' => [
],
'listen' => [
'AppInit' => [],
'HttpRun' => [],
'HttpEnd' => [\app\listener\http\HttpEndListener::class], //HTTP请求结束回调事件
'LogLevel' => [],
'LogWrite' => [],
'QueueStartListener' => [\app\listener\queue\QueueStartListener::class],
'UserLoginListener' => [\app\listener\user\LoginListener::class],
'AdminLoginListener' => [\app\listener\admin\AdminLoginListener::class],//管理员登录
'UserRegisterListener' => [\app\listener\user\RegisterListener::class], //用户注册后置事件
'WechatAuthListener' => [\app\listener\wechat\AuthListener::class], //用户授权后置事件
'OrderCreateAfterListener' => [\app\listener\order\OrderCreateAfterListener::class], //订单创建后置事件
'OrderPaySuccessListener' => [\app\listener\order\OrderPaySuccessListener::class], //订单支付成功后置事件
'OrderDeliveryListener' => [\app\listener\order\OrderDeliveryListener::class], //订单发货后置事件
'OrderTakeListener' => [\app\listener\order\OrderTakeListener::class], //订单收货后置事件
'OrderRefundCreateAfterListener' => [\app\listener\order\OrderRefundCreateAfterListener::class], //售后单生成后置事件
'OrderRefundCancelAfterListener' => [\app\listener\order\OrderRefundCancelAfterListener::class], //售后单取消后置事件
'OutPushListener' => [\app\listener\out\OutPushListener::class], //对外推送事件
'UserLevelListener' => [\app\listener\user\UserLevelListener::class], //用户升级事件
'UserVisitListener' => [\app\listener\user\UserVisitListener::class], //用户访问事件
'NoticeListener' => [\app\listener\notice\NoticeListener::class], //通知->消息事件
'NotifyListener' => [\app\listener\pay\NotifyListener::class],//支付异步回调
'CrontabListener' => [\app\listener\crontab\SystemCrontabListener::class],//定时任务事件
],
];
{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}})
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
{{cateWiki.page_view_num}}人看过该文档
评论(0)
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
176人看过该文档
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}}
{{replyIndex == index ? '取消回复' : '回复'}}
搜索结果
为您找到{{wikiCount}}条结果
位置:{{path.name}} {{(i+1) == item.catalogue.path_data.length ? '':'/'}}
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}