接著上面的一篇
把**貼上來
setrequest($request) 這裡是判斷request是否是繼承自zend_controller_request_abstract,如果是的話就把front的_request賦值為它。
這裡需要了解下什麼是zend_controller_request_abstract,它是所有request抽象出來的抽象類。zend已經提供了兩個實現類,zend_controller_request_http和zend_controller_request_******,一般我們搭建伺服器都是http請求,所以你的專案如果需要重新繼承的話,一般都直接繼承zend_controller_request_http。
zend_controller_request_http中我們經常會使用到的getquery,getcookie,getrequesturi,getbasepath,getparams,getheader等這些http通常的選項都已經有了。
繼續講它的基類zend_controller_request_abstract,這個類的方法包含:
回到**
$front->setrequest(new zend_controller_request_http());這裡呼叫了zend_controller_request_http的建構函式,建構函式在第一次呼叫的時候是$this->setrequesturi();其中的setrequesturi很多都是直接使用$_server這個php全域性變數中的資料來獲取requesturi的。
setrequesturi可以學到的是在不同的伺服器中如何獲取requesturi(特別是在iis中的$server中不同的變數組合有不同的含義),比如 這個url,它的requesturi就是/usvn/item/usvn_test
$front->throwexceptions(true); 將內部的_throwexceptions標誌位設定為true;
$front->setbaseurl("/usvn")這個做了兩件事情,首先是設定front內部的_baseurl屬性,其次呼叫request的setbaseurl,也是設定zend_controller_request_http的內部_baseurl屬性。
$router = new zend_controller_router_rewrite();
$routes_config = new usvn_config_ini(usvn_routes_config_file, usvn_config_section);
$router->addconfig($routes_config, 'routes');
$front->setrouter($router);
下面這三行就直接說,實際上就是使用zend的router模組使用配置檔案,router使用setrouter放入front裡面。
最後一句
$front->dispatch();
這個函式也是最核心的乙個函式。
這個函式首先註冊了乙個外掛程式zend_controller_plugin_errorhandler,index為100,把外掛程式的順序放在最後。
第二步存放了乙個helper,zend_controller_action_helper_viewrenderer,index為-80
下面例項化了request,request是乙個zend_controller_request_http型別。並將request的baseurl設定為前面設定過的_baseurl,就是"/usvn/item/usvn_test"
接著例項化了response,response是乙個zend_controller_response_http();
下面使用plugins來對request和response進行設定,首先實際呼叫了zend_controller_plugin_broker的setrequest函式,這個函式迴圈遍歷broker管理的所有外掛程式,呼叫外掛程式的setrequest($request)函式(如果有的話)。
接下來初始化router,和設定router的引數。router已經在前面設定過了,就是zend_controller_router_rewrite型別
初始化分發器dispatcher,分發器我們是第一次看到,zend_controller_dispatcher_standard類。分發器以後再說。
下面的流程:
呼叫外掛程式的routestartup對request進行處理
呼叫router的route處理request
呼叫外掛程式的routeshutdown對request進行處理
呼叫外掛程式的dispatchloopstartup對request進行處理
進入迴圈分發過程
呼叫外掛程式的predispatch對request進行處理
呼叫dispatcher的dispatch處理request和response
呼叫外掛程式的postdispatch對request進行處理
跳出迴圈分發過程
呼叫外掛程式的dispatchloopshutdown對request進行處理
傳送response
這裡借用 的乙個圖進行說明
Zend的MVC機制(一)
首先看下zend controller front getinstance是呼叫單例模式,例項化了它的內部屬性 plugins,例項化了乙個zend controller plugin broker類。這個類是管理front的外掛程式的類。先看乙個front中的方法public function r...
基於Zend的Captcha機制的應用
如何生成驗證碼?使用php的gd?ok,right。其實zend的captcha模組已經封裝好了。這篇文章就說一下如何使用zend的captcha模組。環境安裝 首先zend的captcha需要安裝gd。檢視有沒有安裝gd需要去phpinfo 中看是否有gd模組。注意,有可能出現php m裡面的模組...
MVC高階篇(二) 路由機制
這個東西好像,一般也不經常動,都用預設的即可。由於 mvc模式在 framework 裡面的解析機制,區別與 webform 模式,是採用解析路由機制的 url。從來例項化檢視列物件,然後對該 action 進行操作,所以路由顯得也很重要,也可以理解為這個是乙個預設的 rul。按照上文 mvc模式,...