## 事件說明
事件的定義寫在`插件名稱類`文件里面,方法命名方式以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接口