首頁 > php框架 > ThinkPHP > 介紹tp5框架中的hook機制

介紹tp5框架中的hook機制

藏色散人
發布: 2021-05-10 08:55:05
轉載
3130 人瀏覽過

以下由thinkphp教學專欄為大家介紹tp5框架中的hook機制,希望對需要的朋友有幫助!

1. 官方解釋

行為(Behavior)是ThinkPHP擴展機制中比較關鍵的一項擴展,行為既可以獨立調用,也可以綁定到某個標籤中進行偵聽,在官方提出的CBD模式中行為也佔了主要的地位,可見行為在ThinkPHP框架中意義非凡。

2. TP5 自帶鉤子(TP框架中已經埋好標籤,我們只要配置實現對應的函數就可以用了)

  1. app_init 應用初始化標籤位,在think\App.php的initCommon函式中Hook::listen('app_init');沒有接收參數。
  2. app_begin應用程式開始標籤位,在think\App.php的run函數中,在載入路由和請求資訊後執行。會接收一個參數,儲存的是本次請求的調度資訊。
  3. module_init 模組初始化標籤位,在think\App.php的module函數中,在載入請求控制器之前執行,接收一個參數,儲存請求資訊。
  4. action_init 控制器開始標籤位,在think\App.php的module函數中,在載入完控制器後,使用反射請求控制器之前執行。接收一個參數,是一個數組,第一個元素是請求控制器實例對象,第二個函數時要執行的控制器函數名稱。
  5. view_fileter 視圖輸出過濾標籤位,在think\View.php的fetch函數中,接收一個參數,視圖字串。
  6. app_end 應用程式結束標籤為,在think\App.php中run函數中,Hook::listen('app_end');
  7. log_write 日誌write方法標籤位,在呼叫Log: :wirte記錄日誌之前執行。接收一個參數,要寫入的日誌資訊。
  8. response_end 回應結束標籤為。在think\Response.php的send函數中,在回應客戶端請求之後執行。

3. 鉤子函數的註冊和監聽都依賴think\Hook.php

4. 系統只帶的鉤子函數,我們可以在application\tags. php中註冊,也可以使用Hook::add()來新增。

> 1. 官方文档数tags.php会自动加载,但是经测试我下载的tp5不会自动加载tags.php文件,所以就手动在think\start.php文件的App::run()->send();函数之前写了一行代码用于,注册tags文件中的钩子实现。代码为
"php
    // 加载Hook
    Hook::import(require APP_PATH . '/tags.php');
"
> 2. 也可以使用Hook::add和Hook::listen来添加自己的钩子函数。Hook::listen()相当于是标签位,Hook::add()则相当于是对标签位相应的实现。所以要确保Hook::add()在Hoo::listen之前执行,不然就没什么用处了。
登入後複製

5. 鉤子函數的綁定。

鉤子函數既可以單獨綁定一個類,也可以綁定類別中的一個方法,或直接綁定一個匿名函數。當綁定到一個類別時,如果類別中有run函數,那就直接執行run函數,如果沒有run函數,而有一個與鉤子名稱相同的函數則會執行該函數。 (注意:鉤子函數是駝峰式命名,且鉤子函數名的優先權大於run函數的優先權)

以上是介紹tp5框架中的hook機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
tp5
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板