Zend_Controller的工作原理

一個輕量的,模塊化和可擴展的體系
服務器君一共花費了119.603 ms進行了5次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

Zend_Controller是使用MVC模式來構建一個站點的基礎。Zend_Controller體系是一個輕量的,模塊化和可擴展的體系。它只提供最核心的必要的部分,允許開發者有很大的自由來靈活地構建自己的站點。使用Zend_Controller的站點,其代碼結構會有一部份是相似的。

Zend_Controller 的工作流(workflow)是通過幾個組件來實現的。雖然不需要完全理解這幾個組件的含義,如果你對工作流程有點了解是很有幫助的:

  • Zend_Controller_Front 前端控制器
  • Zend_Controller_Front(前端控制器)是Zend_Controller_Controller體系的組織者,它是FrontController設計模式的實現。 Zend_Controller_Front處理服務器接受的所有請求,并最后負責將請求分配給ActionController (Zend_Controller_Action)。Zend_Controller_Controller就是將客戶的原始請求轉發給相應的處理組件(Action)去完成具體的業務處理。

  • Zend_Controller_Router
  • Zend_Controller_Router相當于一個路由器。路由是將一個URI分解并決定由哪一個Controller,和用什么Action來處理的過程。controller,action和可選的參數的定義,被封裝成一個對象-- Zend_Controller_Dispather_Token,然后由Zend_Controller_Dispatcher來處理。路由只發生一 次:當請求被服務器接收到時,在分配到第一個控制器之前。Zend_Controller_Router負責解析客戶的請求URI,分析其中的參數,以決定定位到哪個ActionController。Zend_Controller_Router會把分析出的參數封裝成Zend_Controller_Dispather_Token對象。

    所謂router,和我們熟知的網絡路由器的功能是很相似的,具有判斷網絡地址和選擇路徑的功能,這里就是用來重定向。

  • Zend_Controller_Dispatcher 分配器
  • "分配"的過程即根據Zend_Controller_Dispatcher_Token來查找適合的contoller文件,實例化其中的controller類(必須實現Zend_Controller_Action),并且最后在控制器內運行action。和路由不同,分配的過程不斷重復的,Zend_Controller_Dispatcher被Zend_Controller_Front不斷調用直到所有action都依次分配完畢。Zend_Controller_Dispatcher是根據Zend_Controller_Router對請求URI的解析結果(一個Zend_Controller_Dispather_Token對象)將請求轉發給相應的Zend_Controller_Action。

  • Zend_Controller_Action
  • Zend_Controller_Action是最基本的控制器。每個具體的控制器都是從Zend_Controller_Action類繼承而來,是Zend_Controller_Action的子類,并且有自己的action方法。Zend_Controller_Action是基本的控制器,真正對一次用戶請求進行具體處理的工作是由它來完成的。

Zend_Controller的工作流程相當簡單。Zend_Controller_Front接收一個請求,然后由 Zend_Controller_Router來決定分配給哪個controller(實現Zend_Controller_Action的類)。Zend_Controller_Router把URI分解封裝成 一個Zend_Controller_Dispatcher_Token 對象。Zend_Controller_Front接著進入一個分配循環,調用Zend_Controller_Dispatcher,把token對象 傳給dispatcher來分配到具體的controller和action進行處理。在controller結束后,又把控制權交加給 Zend_Controller_Front。如果controller發現需要分配另一個controller(返回一個新的token對象),循環會一直繼續直到另一次分配執行完畢。

Zend_Controller工作流示意圖如下:

Route Process 路由過程

在你構建第一個控制器之前,你需要理解Zend_Controller_Router中的重定向過程是如何工作的。記住工作流程分為兩步:一是重定向(routing),只發生一次;二是分配(dispatching),循環過程。

Zend_Controller_Front 調用Zend_Controller_Router來使一個URI 映射到一個controller(Zend_Controller_Action類)及其中的action上。 Zend_Controller_Router分解URI,生成一個對象Zend_Controller_Dispatcher_Token,然后再傳遞給分配器(Zend_Controller_Dispatcher)。

router使用很簡單的方法來決定所要使用的controller及其action(URI映射到Zend_Controller_Action):

http://www.824886.live/controller/action/

上面controller就是我們要采用的控制器,action就是我們要采用的action。

其它可選擇的GET參數可以在URI中定義,并傳遞給controller。格式為key/value:http://framework.zend.com/controller/action/key1/value1/

如果/controller/這部分沒有寫明,默認調用index。 如果/action/這部份沒有寫,也默認調用index。如:

http://framework.zend.com/roadmap/future/
Controller: roadmap
Action    : future
http://framework.zend.com/roadmap/
Controller: roadmap
Action    : index
http://framework.zend.com/
Controller: index
Action    : index 

controller,action的名稱及其它參數將會被封裝到一個token對象中-- Zend_Controller_Dispatcher_Token。這個對象被傳回到Zend_Controller_Front,然后進入分配過程, 被傳遞給Zend_Controller_Dispatcher。

Token對象

Token對象是個很簡單的對象,在Zend_Controller_Front和實現router,dispatcher接口的類間傳遞。它把controller,action和其它GET參數封裝在一起。

  • controller的名稱通過getControllerName()及setControllerName()來獲得和設置
  • action的名稱過getActionName()和setActionName()來獲得和設置。
  • 傳遞給action的參數是個數組(key/value形式),可以通過getParams()來獲得,通過setParams()來設置。

Dispatch Process 分配過程

所謂分配過程,就是根據token對象(Zend_Controller_Dispatcher_Token) ,抽取其中的信息:controller的名稱,action的名稱,參數等等,然后實例化一個controller,并調用其中的action來進行處理。

本文地址:http://www.824886.live/librarys/veda/detail/320,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.824886.live/librarys/veda/detail/320

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏。

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《人月神話》 弗雷德里克·布魯克斯 (作者), 汪穎 (譯者)

《人月神話》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在軟件領域,很少能有像《人月神話》一樣具有深遠影響力并且暢銷不衰的著作。Brooks博士為人們管理復雜項目提供了最具洞察力的見解。既有很多發人深省的觀點,又有大量軟件工程的實踐。本書內容來自Brooks博士在IBM公司System/360家族和OS/360中的項目管理經驗。該書英文原版一經面世,即引起業內人士的強烈反響,后又譯為德、法、日、俄中等多種語言,全球銷量數百萬冊。確立了其在行業內的經典地位。

更多計算機寶庫...

云南快乐十分走势一定牛 捕鱼游戏那个好玩 新研股份股票 广东南粤福彩36选7 35选7今天的开奖结果 pk10计划软件冠军五码 云南11选五5开奖结果前三组 至尊棋牌? 到这里 正规股票直播平台 吉林微乐麻将 在家兼职开网店