以下由thinkphp教學專欄為大家介紹tp5框架中的hook機制,希望對需要的朋友有幫助!
行為(Behavior)是ThinkPHP擴展機制中比較關鍵的一項擴展,行為既可以獨立調用,也可以綁定到某個標籤中進行偵聽,在官方提出的CBD模式中行為也佔了主要的地位,可見行為在ThinkPHP框架中意義非凡。
- app_init 應用初始化標籤位,在think\App.php的initCommon函式中Hook::listen('app_init');沒有接收參數。
- app_begin應用程式開始標籤位,在think\App.php的run函數中,在載入路由和請求資訊後執行。會接收一個參數,儲存的是本次請求的調度資訊。
- module_init 模組初始化標籤位,在think\App.php的module函數中,在載入請求控制器之前執行,接收一個參數,儲存請求資訊。
- action_init 控制器開始標籤位,在think\App.php的module函數中,在載入完控制器後,使用反射請求控制器之前執行。接收一個參數,是一個數組,第一個元素是請求控制器實例對象,第二個函數時要執行的控制器函數名稱。
- view_fileter 視圖輸出過濾標籤位,在think\View.php的fetch函數中,接收一個參數,視圖字串。
- app_end 應用程式結束標籤為,在think\App.php中run函數中,Hook::listen('app_end');
- log_write 日誌write方法標籤位,在呼叫Log: :wirte記錄日誌之前執行。接收一個參數,要寫入的日誌資訊。
- response_end 回應結束標籤為。在think\Response.php的send函數中,在回應客戶端請求之後執行。
> 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之前执行,不然就没什么用处了。
鉤子函數既可以單獨綁定一個類,也可以綁定類別中的一個方法,或直接綁定一個匿名函數。當綁定到一個類別時,如果類別中有run函數,那就直接執行run函數,如果沒有run函數,而有一個與鉤子名稱相同的函數則會執行該函數。 (注意:鉤子函數是駝峰式命名,且鉤子函數名的優先權大於run函數的優先權)
以上是介紹tp5框架中的hook機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!