# 事件监听
# 前言
herosphp/event (opens new window) 提供一种精巧的事件机制,可实现在不侵入代码的情况下执行一些业务逻辑,实现业务模块之间的解耦。典型的场景如一个新用户注册成功时,只要发布一个自定义事件如user.register,各个模块遍能收到该事件执行相应的业务逻辑。
# 安装
# 1. 安装扩展
composer require herosphp/event
# 2. 生成配置文件event.config.php
composer vendor:publish "herosphp/event"
# 3. 注册启动器
<?php
declare(strict_types=1);
namespace app\init;
use herosphp\core\Config;
use herosphp\utils\Logger;
use herosphp\plugin\event\EventStarter as BaseEventStarter
class EventStarter extends BaseEventStarter
{
protected static bool $debug = false;
}
EventStarter::init();
# 使用
在完成以上的安装后,我们实操(栗子)一下。
# 1. 注册事件
在config/event.config.php文件上,我们注册一个user.login
事件,支持各种闭包的写法。
declare(strict_types=1);
return [
//key=> callback array
'user.login' => [
function (string $userId) {
echo "config.user.login event,userId:{$userId}".PHP_EOL;
},
// [UserLoginEvent::class,'demo'],
// [UserLoginEvent::class,'demo2'], //static method
],
];
# 2. 使用事件
在业务代码中,Event::emit
提交即可
Event::emit("user.login","1");
使用提示
Event::emit($eventName, $data);参数$data可以是任意的数据,例如数组、类实例、字符串等。
# 3.停止事件广播
存在多个处理函数,当我们在事件处理函数里返回false时,该事件将停止广播。
# 注意事项
event事件处理并不是异步的,event
不适合处理慢业务,慢业务应该用消息队列处理,例如herosphp/redis-queue