一、
非嵌套Dispatcher(2.x版本如下)php
Yaf對請求的處理是非嵌套的,這意味着全部對Controller轉移都是非嵌套的,若是一個Controller沒有執行完,發生了轉移,那有可能發生不可知的結果甚至錯誤,Yaf提供的forward是等待當前Controller執行完畢才處理的,所以若是徹底按照MVC的方式對請求進行處理,要達到嵌套處理的效果,須要本身實現代碼.流程對應說明瀏覽器
mainloopstart
dispatchLoopStartup
preDispatch//實際上是個循環受forward控制
這之間request不能發送改變,能夠forward可是會被延期執行
postDispatch
forward的request延期執行,循環到preDispatch
dispatchLoopShutdown
能夠dispatch一個新的request,會開始新的dispatchLoopStartup
mainloopend 服務器
二、
單例模式類,Yaf中函數
Yaf_Application
Yaf_Loader,其中autoload()和import()是靜態函數
Yaf_Dispatcher
Yaf_Registry,其中has()、get()、set()、del()是靜態函數
Yaf_Session
類實例 是單例,其餘不是
須要注意若是在Yaf_Controller_Abstract繼承類action中使用了forward,那將會產生新的實例對象。oop
三、
對於Controller來講, 真正的執行體是在Controller中定義的一個一個的動做Action, 固然這些動做也能夠定義在Controller外(放在成員$actions中指定) post
四、
Yaf_Dispatcher::setView(設置視圖引擎)
Yaf_Controller_Abstract::display(渲染視圖模板,是對Yaf_View_Simple::display的包裝,和Yaf_Controller_Abstract::render相似)spa
五、Yaf_Controller_Abstract::forward
Yaf_Controller_Abstract::redirect
redirect forward的區別
1)從地址欄顯示來講
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因此它的地址欄仍是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址.因此地址欄顯示的是新的URL.因此redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。
2)從數據共享來講
forward:轉發頁面和轉發到的頁面能夠共享request裏面的數據.
redirect:不能共享數據.對象
六、添加路由能夠在兩個地方
1) 配置文件
2)booststrap.php文件 ,這個文件能夠指定具體位置繼承