🔔 行为事件

怪兽框架行为事件总结

多客怪兽框架采用事件驱动架构,通过行为事件系统实现模块间的松耦合通信和功能扩展,部分事件需要附带模块标识,例如gs_xhd、gs_xsy,接下来的文档统称为标识

事件分类与用法表格

生命周期事件

其中安装、更新、卸载这三个执行完毕后需要返回true,然后由于模块平台化,如果指定平台被删除,会触发delete_platform,开发者同时需要执行对应的方法来处理。

onTimer这个后缀默认有5、10、60,例如onTimer_5(),这个并非准确的定时,仅仅为系统在被请求的时候做的缓存来触发的时间间隔。如需要准确的,可以使用swoole或者Bt内置的计划任务去触发。

事件名称参数说明示例
install插件安装时触发install() { return true; }
upgrade插件升级时触发upgrade() { return true; }
uninstall插件卸载时触发uninstall() { return true; }
delete_platform$plaid平台被删除时触发delete_platform($plaid) { }
onTimer_5/10/60周期定时任务事件onTimer_5() { }

系统事件

事件名称参数说明示例
AppInit应用初始化时触发AppInit() { }
HttpRunHTTP请求开始时触发HttpRun() { }
RouteLoaded路由加载完成时触发RouteLoaded() { }
LogWrite$data系统写入日志时触发LogWrite($data) { }
ExceptionHandle$e系统发生异常时触发ExceptionHandle($e) { }

模块事件

这里可以参考源码vendor/liuhongbin/dk-addons/src/addons/Route.phpexecute方法,中间件是拦截全局的request请求,可以自己开发一些用户系统统计的相关功能,或者是拦截、修改请求。

事件名称参数说明示例
{标识}_addon_begin$request插件路由处理前触发gs_example_addon_begin($request) { }
{标识}_addon_end$app插件路由处理后触发gs_example_addon_end($app) { }
addon_middleware$request插件全局中间件addon_middleware($request) { }

配置事件

注意

注意platform_addon_config{标识}_platform_addon_config效果是一样的,但platform_addon_config仅在Plugin.php有效,推荐使用后者,将事件内容统一放到Listen.php

当前为模块的配置项,可以通过设置PHP表单,会自动生成模块配置项,分配配置模块整体、平台模块。

事件名称参数说明示例
{标识}_addon_config$row设置模块配置表单gs_example_addon_config($row) { }
{标识}_platform_addon_config$row设置平台模块配置表单gs_example_platform_addon_config($row) { }
platform_addon_config$row设置平台模块配置表单(old)platform_addon_config($row) { }

界面嵌入点

说明

当前实现对系统本身的一些扩充,当前此处未完全确定采用下列嵌入点,未来可能会有调整。

事件名称参数说明示例
customer_menu_hook自定义客户端菜单customer_menu_hook() { }
header_user_left_hook头部用户左侧内容钩子header_user_left_hook() { }
header_user_right_hook$params头部用户右侧内容钩子header_user_right_hook($params) { }
insert_addon_js$sys自定义注入JS资源insert_addon_js($sys) { }
system_create_url$url生成自定义链接地址system_create_url($url) { }

微信相关事件

可以使用开发者工具中的事件记录,查看传递的事件数据,详细内容参考https://www.easywechat.com/。

事件名称参数说明示例
wechat_message$message接收微信公众号消息wechat_message($message) { }
{标识}_wechat_notify$param微信支付回调通知gs_example_wechat_notify($param) { }
wework_kf_message$data企业微信客服消息wework_kf_message($data) { }
wework_customer_message$data企业微信客户联系消息wework_customer_message($data) { }
wework_event_message$data企业微信事件消息wework_event_message($data) { }

事件使用说明

配置事件

配置事件用于定义插件的配置界面,可以在Listen.phpPlugin.php中实现,Form为FormCreate类,生成数据表单:

public function gs_example_platform_addon_config($row)
{
    $rule = array();
    $rule[] = Form::select('config_option', '配置选项', $row['config_option'] ?? 0)
        ->options([
            ['value' => 0, 'label' => "选项一(默认)"],
            ['value' => 1, 'label' => "选项二"],
            ['value' => 2, 'label' => '选项三']
        ]);
    return $rule;
}

微信相关事件

微信相关事件用于处理微信公众号、企业微信的消息和回调:

public function wechat_message($message)
{
    if ($message['Content'] == '你好') {
        return new Text('回复消息');
    }
    return '';
}

public function gs_example_wechat_notify($param)
{
    // 处理微信支付回调
    return true;
}

public function wework_kf_message($data)
{
    // 处理企业微信客服消息
}

6. 界面钩子

界面钩子用于在系统界面特定位置插入自定义内容:

// 客户端平台管理右侧显示新的菜单
public function customer_menu_hook()
{
    return [
        ['title' => '自定义菜单', 'url' => 'https://example.com']
    ];
}

// 在客户端用户昵称左侧显示内容
public function header_user_left_hook()
{
    return '<span style="color: #f00;margin-right: 10px;">自定义内容</span>';
}

注意事项

  1. 命名规范:插件特定的事件通常使用{标识}_{事件名}的格式,如gs_example_addon_begin

  2. 实现位置

    • 生命周期事件通常在Plugin.php中实现
    • 大多数功能事件在Listen.php中实现
    • 部分事件(如配置事件)可以在Plugin.php或Listen.php中实现
  3. 返回值:不同事件要求不同的返回值,开发者需要按照事件的要求返回适当的值。

通过合理使用这些事件,开发者可以在不修改框架核心代码的情况下,实现丰富的功能扩展和自定义处理逻辑。