## 事件说明
事件的定义写在`插件名称类`文件里面,方法命名方式以Hook结尾,字母驼峰式命名。
## 插件能使用的事件
<blockquote class="danger"><p>2.1.220504版本起插件事件不在使用下划线调用,但依然支持旧版的下划线方式</p></blockquote>
| 事件名称 | 插件名称类使用方式 | 描述 | 参数说明 |
| --- | --- | --- | --- |
| ~~addons_init~~<br/>2.1.220504版本起:addonsInit | addonsInitHook | 插件初始化,这个事件能影响到前台、后台,优先级最高 | - |
| addonMiddleware | addonMiddlewareHook | 插件全局中间件,只要访问任意插件前台时触发 | 请求的Request对象 |
| addonsBegin | addonsBeginHook | 插件路由调度前事件,访问插件控制器时触发 |请求的Request对象 |
| addonModuleInit | addonModuleInitHook | 插件控制器初始化前事件,访问插件控制器时触发 |请求的Request对象 |
| addonsActionBegin | addonsActionBeginHook | 插件控制器操作方法执行前事件,访问插件控制器操作方法时触发 |传入控制器对象与将要操作的方法 |
| indexRoute | indexRouteHook | 访问前台时,在路由初始化时触发, | 无 |
| adminRoute | adminRouteHook | 访问后台时,在路由初始化时触发 | 无 |
| apiRoute | apiRouteHook | 访问api时时,在路由初始化时触发 | 无 |
| configInit |configInitHook| 访问前台或后台时,站点配置初始化后触发(前后台的基础类) | 站点配置 |
| adminLoginSuccess |adminLoginSuccessHook| 后台登录成功后标签位 | 登录信息 |
| indexHead | indexHeadHook |前台模板头部标签位 | 无 |
| indexFooter | indexFooterHook | 前台模板底部标签位 | 无 |
|themeChange|themeChangeHook|模板主题切换事件|传入index_theme,或admin_theme|
| uploadAfter | uploadAfterHook |文件上传后触发 | 传入文件信息数组 |
| uploadDel | uploadDelHook |文件删除后触发 | 传入删除的模型对象 |
| ~~addonConfig_save~~| |插件保存配置时触发(已废弃) | 提交的配置表单 |
| 插件标识ConfigSave |插件或模板配置保存时触发(2.1.220220新增) | 提交的配置表单,例如你的插件叫:demo, 事件定义为:demoConfigSaveHook|
| apiLoginMiddleware | apiLoginMiddlewareHook | API登录中间件 | 请求Request对象 |
| apiAuthMiddleware |apiAuthMiddlewareHook | API权限中间件 | 请求Request对象 |
|HttpRun|HttpRunHook|应用开始标签位(TP内置)|无|
|HttpEnd|HttpEndHook|应用结束标签位(TP内置)|当前响应对象实例|
|RouteLoaded|RouteLoadedHook|路由加载完成(TP内置)|无|
|LogWrite|LogWriteHook|日志write方法标签位(TP内置)|当前写入的日志信息|
## 使用方式
例如插件名称叫`demo`,在`Demo`插件名称类里面,若要使用`indexHead`前台模板头部事件。这里首先需要模板有放置该标签事件,可前往默认模板找到head.html文件,即可看到`{:hook("indexHead")}`,当访问前台页面执行到`{:hook("indexHead")}`时就会调用下面的`indexHeadHook`方法。
完整写法如下
~~~
<?php
declare (strict_types=1);
namespace addons\demo;
use think\Addons;
class Demo extends Addons
{
public function install()
{
return true;
}
public function uninstall()
{
return true;
}
// 前台模板执行到<head></head>时触发,通常用于加载JS、CSS达到特定的需求
public function indexHeadHook()
{
// 加载js
return "<script src='/static/main.js'></script>";
// 或直接渲染视图,可参考插件视图
return $this->fetch('index/index');
}
}
~~~
## 扩展
当我们在写业务逻辑时,需要自己定义一些事件标签位来给其他插件实现功能扩展,那么我们可以参考下面来实现。
**1. hook方法**
系统有提供`hook`方法来触发事件,方法说明:
~~~
/**
* $event 事件名称
* $params 传入参数
* $once = true 表示返回一个结果,$once = false 表示返回全部结果
* $original = true 表示 返回TP trigger原始数据,false - 返回字符串,如果原样返回数据是数组即会转换成字符串
*/
hook($event, $params, $once, $original)
~~~
**2. 触发事件**
例如定义触发`showTest`事件。
```
// 控制器触发,传入数组
hook('showTest', ['a'=>'测试']);
// 模板触发,传入数组
{:hook("showTest",['a'=>'测试'])}
// 接收返回值:输出原始数据。第四个参数给true即可
$arr = hook("showTest",['a'=>'测试'],true,true);
```
> 注意:当有多个插件定义showTest事件时,返回值是数组的,并不建议这样来使用事件
上面定义了`showTest`触发事件方法,那么在其他插件就可以定义`showTest`事件来实现扩展,如下
~~~
<?php
declare (strict_types=1);
namespace addons\demo;
use think\Addons;
class Demo extends Addons
{
public function install()
{
return true;
}
public function uninstall()
{
return true;
}
// 对应showTest
public function showTestHook()
{
echo "测试";
}
}
~~~
- 简介
- 下载与安装配置
- 下载
- 虚拟主机安装
- 虚拟主机必读
- 百度云虚拟主机
- 创业云虚拟主机
- Linux下宝塔安装
- 宝塔一键部署
- Windows下宝塔安装
- phpEnv下安装
- phpStudy下安装
- 伪静态(url重写)
- 安装系统
- 调试模式与env文件
- 重新安装与安装文件说明
- 后台使用帮助
- 后台入口文件
- 首页面板
- 配置中心
- 站点配置
- 邮件配置
- 附件配置
- 应用中心配置
- 前台URL规则配置
- SEO设置
- SEO设置-静态生成
- 文档属性
- 站点模块
- V2.2.2版本 -
- V2.2.3版本 +
- 模型管理
- 栏目管理
- 字段类型与组件
- 前言
- 前端组件
- 动态下拉(selectpage)
- 验证规则
- text 单行文本
- textarea 多行文本
- radio 单选
- checkbox 复选
- select 下拉列表
- selects下拉列表(多)
- selectpage 动态下拉
- editor编辑器
- image图片
- images图片(多)
- number数字
- date日期
- datetime日期和时间
- downfile文件上传
- downfiles文件上传(多)
- array 数组(键值对)
- 内容管理
- 自定义URL
- 多语言
- 界面多语言
- 内容多语言
- 多语言URL地址
- 附件管理
- 应用中心
- 标签语法
- 标签使用必读
- 列表标签
- content 内容列表标签
- contentpage 内容列表分页
- wfpage 瀑布流分页
- filter 筛选标签
- order 排序标签
- 内容标签
- guestbook 留言(表单)标签(废弃)
- form 表单标签
- pre 上一篇标签
- next 下一篇标签
- prenext 上一篇下一篇(高级)标签
- fileinfo 获取附件信息(文件下载)
- 内容分页
- raw 格式化编辑器文本(即将废弃)
- 全局标签
- seo 标签
- channel 栏目标签
- arcone 获取单条文档
- breadcrumb 面包屑导航标签
- adv 站点模块标签
- date 日期格式化标签
- substr字符(标题)截取标签
- volist 循环标签
- language 获取语言列表标签
- lang 特定语言下显示内容标签
- query 查询数据库内容
- include 导入模板文件标签
- 原生PHP与php标签
- map生成位置地图
- thumb 生成缩略图
- addons 插件检测
- 标签管理
- taglist标签(获取标签列表)
- tagarclist根据标签获取文章内容列表
- 导入标签
- 模板开发
- 1. 创建模板
- 2. 模板目录结构
- 3. 模板描述文件(重要) info.ini
- 4. 变量输出格式
- 4. 模板变量
- 5. 获取站点配置
- 6. 模板界面多语言
- 7. 模板静态目录及调用静态文件
- 8. 模板定义插件事件
- 9. 模板搜索页
- 10. 模板配置JSON
- 11. 导入演示数据
- 12. 卸载删除演示数据
- 13. 模板文件打包
- 14. 整站源码打包
- 插件开发
- 1. 创建插件
- 2. 目录结构
- 3. 插件名称类
- 4. 插件信息(info.ini)
- 5. 插件事件
- 6. 配置文件
- 7. install 安装目录
- 8. 创建菜单
- 9. 插件控制器
- 10. 插件视图
- 10-1 插件主题化
- 11. 插件模型
- 12. 模型事件(已废弃)
- 13. 插件内置函数
- 13-1 插件函数库
- 14. 插件多语言
- 15. 插件中间件
- 16. 插件路由
- 17. 插件验证器
- 18. 标签库
- 19. 第三方类库
- 20. 数据库文件导入
- 插件打包
- 后台前端使用帮助
- 二次开发帮助(更新中)
- 后台前端开发帮助
- 路由(链接地址、访问规则)
- URL访问
- 路由定义
- URL生成
- 会员管理
- 前台限制页面登录或权限控制
- 附录
- 数据字典
- 助手函数库
- API接口