Skip to content

事件

事件概述

事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了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 框架会自动加载系统的内置事件和插件中定义的事件

基于 MIT 协议发布