🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 事件 事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性 ### 定义事件 系统事件存放在app\listener目录下,创建一个登录后执行的事件,创建文件:app/listener/member /MemberLoginListener.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 return [ //事件注入 'listen' => [ 'memberLogin' => [ 'app\\listener\\member\\MemberLoginListener' ], ], ]; ~~~ ### 调用事件 使用event函数调用事件 ~~~ event("memberLogin", $member_info); ~~~ 和event使用效果一样 ~~~ use think\facade\Event; Event::event('memberLogin'); ~~~ 触发事件,返回事件的第一个有效返回值 > 一个事件后面可以对应多个类来执行,使用当前方法只会返回第一个事件类中的 handle方法中的返回值 ~~~ use think\facade\Event; Event::until('memberLogin'); ~~~ 触发事件,返回所有事件类的返回值 ~~~ use think\facade\Event; Event::trigger('memberLogin'); ~~~ niucloud-admin 框架会自动加载系统的内置事件和插件中定义的事件