# 事件监听

# 前言

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

上次更新: 10/27/2022, 11:18:25 AM