yaf中定義了6個鉤子(hook),相當於事件,在外掛程式(plugin)類中定義與鉤子相同名稱的方法,註冊之後,這些方法便會被框架自動呼叫。
觸發順序
名稱觸發時機說明1
routerstartup
路由之前
觸發最早的乙個事件
2routershutdown
路由結束之後
3dispatchloopstartup
分發迴圈開始前
4predispatch
分發之前
如果勤求處理過程中傳送了forward,則該事件可能觸發多次
5postdispatch
分發之後
動作執行結束,檢視渲染完成,也可能觸發多次
6dispatchloopshutdown
分發迴圈結束
所有業務邏輯已經完成,響應還未傳送
寫個例子來加深理解:
1. 定義外掛程式
定義乙個traceplugin外掛程式,其中定義yaf框架中的6個hook同名方法。
<?php
class
traceplugin
extends
yaf_plugin_abstract
public
function
routershutdown
(yaf_request_abstract $request, yaf_response_abstract $response)
public
function
dispatchloopstartup
(yaf_request_abstract $request, yaf_response_abstract $response)
public
function
predispatch
(yaf_request_abstract $request, yaf_response_abstract $response)
public
function
postdispatch
(yaf_request_abstract $request, yaf_response_abstract $response)
public
function
dispatchloopshutdown
(yaf_request_abstract $request, yaf_response_abstract $response)
}
2. 註冊外掛程式
3.測試外掛程式
indexcontroller內容如下:
<?php
class
indexcontroller
extends
yaf_controller_abstract
public
function
useraction
()
}
為了測試多次觸發predispatch
和postdispatch
,indexaction
中forward
到了useraction
。
瀏覽器中訪問yaf.cc/index/index:
由上圖可見,predispatch
和postdispatch
確實被觸發了兩次,同時兩個action中的檢視都渲染出來了。
鉤子學習筆記
rel file list href file e temp msohtml1 01 clip filelist.xml 一 鉤子過程就像是乙個監聽 偵查者,os先把訊息發給鉤子過程,鉤子捕獲訊息後再決定對訊息的處理 二 安裝鉤子過程的原型說明 hhook setwindowshookex inti...
c 鉤子學習筆記
包括系統鉤子和執行緒鉤子,或者叫全域性鉤子和私有鉤子。系統鉤子需要乙個單獨的dll,這個地方耽誤了不少時間,網上有說可以不用單獨dll的。現在開始貼 參照了紅黑聯盟中的一篇文章。複製 如下 public class sethook public abstract class hooks hookty...
Yaf學習之控制器
yaf中的控制器 序號方法名稱作用1 getmodulename 獲取當前所在模組的名稱 2getviewpath 獲取檢視路徑 3render string tpl,array params 渲染乙個檢視,返回乙個yaf response abstract例項 4display string tp...