事件
事件概述
事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性。
定义事件
系统事件存放在app\listener目录下,创建一个登录后执行的事件,创建文件:app/listener/member /MemberLoginListener.php
php
<?php
namespace app\listener\member;
/**
* 会员登录时间
* Class MemberLogin
* @package app\listener\member
*/
class MemberLoginListener
{
/**
* 接收会员对象
* @param object $member
*/
public function handle(object $member)
{
return ;
}
}配置事件
在根目录app/event.php文件的listen数组中配置
php
<?php
return [
//事件注入
'listen' => [
'memberLogin' => [ 'app\\listener\\member\\MemberLoginListener' ],
],
];调用事件
使用event函数调用事件
php
event("memberLogin", $member_info);和event使用效果一样
php
use think\facade\Event;
Event::event('memberLogin');触发事件,返回事件的第一个有效返回值
一个事件后面可以对应多个类来执行,使用当前方法只会返回第一个事件类中的 handle方法中的返回值
php
use think\facade\Event;
Event::until('memberLogin');触发事件,返回所有事件类的返回值
php
use think\facade\Event;
Event::trigger('memberLogin');niucloud-admin 框架会自动加载系统的内置事件和插件中定义的事件
