🔔 行为事件
怪兽框架行为事件总结
多客怪兽框架采用事件驱动架构,通过行为事件系统实现模块间的松耦合通信和功能扩展,部分事件需要附带模块标识,例如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() { } |
| HttpRun | 无 | HTTP请求开始时触发 | HttpRun() { } |
| RouteLoaded | 无 | 路由加载完成时触发 | RouteLoaded() { } |
| LogWrite | $data | 系统写入日志时触发 | LogWrite($data) { } |
| ExceptionHandle | $e | 系统发生异常时触发 | ExceptionHandle($e) { } |
模块事件
这里可以参考源码vendor/liuhongbin/dk-addons/src/addons/Route.php中execute方法,中间件是拦截全局的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) { } |
| $sys | 自定义注入JS资源 | insert_addon_js($sys) { } | |
| $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.php或Plugin.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>';
}
注意事项
命名规范:插件特定的事件通常使用
{标识}_{事件名}的格式,如gs_example_addon_begin。实现位置:
- 生命周期事件通常在Plugin.php中实现
- 大多数功能事件在Listen.php中实现
- 部分事件(如配置事件)可以在Plugin.php或Listen.php中实现
返回值:不同事件要求不同的返回值,开发者需要按照事件的要求返回适当的值。
通过合理使用这些事件,开发者可以在不修改框架核心代码的情况下,实现丰富的功能扩展和自定义处理逻辑。
