Skip to content

event 事件钩子开发指南

事件钩子概述

事件钩子是一种回调机制,允许插件在系统特定事件发生时执行自定义逻辑。通过事件钩子,插件可以在不修改核心代码的情况下,对系统行为进行扩展和定制。降低系统的耦合性的同时,也降低了BUG的可能性。

事件钩子的主要作用:

  • 实现插件与系统的解耦

  • 允许插件对系统行为进行扩展

  • 提供标准化的扩展点,便于插件开发

  • 支持多个插件同时响应同一事件

定义事件

php
<?php

return [
    'bind' => [
        // todo 定义事件绑定
    ],
    'listen' => [
        // todo 定义事件监听
    ],
    'subscribe' => [
        // todo 定义事件订阅
    ]
];

命名规范

事件键关键字名称

事件键名通常使用大写驼峰命名法,用于标识特定的事件类型。可以根据事件的操作,增加 After、Before、Success等后缀。例如:

  • SiteInit:站点初始化事件

  • AddSiteAfter:站点创建后事件

  • MemberRegister:会员注册事件

具体某个事件名称

建议以Listener结尾,例如:

  • SiteInitListener:站点初始化事件监听

  • AddSiteAfterListener:站点创建后事件监听

  • MemberRegisterListener:会员注册事件监听

调用事件

在系统或插件代码中,可以通过以下方式触发事件:

php
// 触发事件并获取结果
$result = event('AddSiteAfter', $data);

// 触发事件但不关心结果
event('AddSiteAfter', $data);

事件名称:AddSiteAfter,表示「站点添加后」这一事件点。

事件参数(可选):$data,传递给事件监听器的数据,包含站点添加后的相关信息。通常是一个关联数组。

插件定义event事件钩子的文件位置

插件的事件钩子配置文件位于:

niucloud/addon/[插件名称]/app/event.php

例如hello_world插件,具体路径为:

niucloud/addon/hello_world/app/event.php

开发者可以根据自身插件的业务需求,编写事件监听。

在listener目录下开发事件钩子的具体业务代码

文件位于:

niucloud/addon/[插件名称]/app/listener/

例如hello_world插件,具体路径为:

niucloud/addon/hello_world/app/listener/AddSiteAfterListener.php

框架定义event事件钩子的文件位置

框架会定义一些公共、常用、全局可扩展的事件钩子,插件可以进行实现。框架的事件钩子配置文件位于:

niucloud/app/event.php

基于 MIT 协议发布