Zend的MVC機制(二)

2021-09-06 05:38:46 字數 3266 閱讀 2598

接著上面的一篇

把**貼上來

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模式,...