Zend_Controller的工作原理
Zend_Controller是使用MVC模式来构建一个站点的基础。Zend_Controller体系是一个轻量的,模块化和可扩展的体系。它只提供最核心的必要的部分,允许开发者有很大的自由来灵活地构建自己的站点。使用Zend_Controller的站点,其代码结构会有一部份是相似的。
Zend_Controller 的工作流(workflow)是通过几个组件来实现的。虽然不需要完全理解这几个组件的含义,如果你对工作流程有点了解是很有帮助的:
- Zend_Controller_Front 前端控制器
- Zend_Controller_Router
- Zend_Controller_Dispatcher 分配器
- Zend_Controller_Action
Zend_Controller_Front(前端控制器)是Zend_Controller_Controller体系的组织者,它是FrontController设计模式的实现。 Zend_Controller_Front处理服务器接受的所有请求,并最后负责将请求分配给ActionController (Zend_Controller_Action)。Zend_Controller_Controller就是将客户的原始请求转发给相应的处理组件(Action)去完成具体的业务处理。
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_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的子类,并且有自己的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.bkjia.com/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来进行处理。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在PHP中使用ZendFramework:快速入門指南ZendFramework是一個開源的、基於PHP的Web應用程式框架,它是一個強大且易於擴展的框架。 ZendFramework包含了許多好用的元件,這些元件可以幫助你建立高效能的網路應用程式。本文將介紹如何在PHP中使用ZendFramework,幫助你快速入門。安裝ZendFramewo

透過ZendFramework中間件實現高效率的資料庫查詢引言在開發過程中,資料庫查詢是不可避免的一部分。一個高效率的資料庫查詢可以大大提高系統的效能和使用者體驗。 ZendFramework是一個使用廣泛的PHP框架,具有強大的資料庫操作功能。本文將介紹如何透過ZendFramework中間件來實現高效的資料庫查詢,並提供對應的程式碼範例。一、了解ZendF

ZendFramework中間件:為應用程式新增OAuth和OpenID登入支援在現今的網際網路應用程式中,使用者認證是一個關鍵的功能。為了提供更好的使用者體驗和安全性,許多應用程式選擇整合第三方登入服務,如OAuth和OpenID。在ZendFramework中,我們可以透過中間件來輕鬆為應用程式新增OAuth和OpenID登入支援。首先,我們要安裝Ze

ZendFramework是一個功能強大的開發框架,可以幫助開發人員快速建立高效能、可擴展的PHP應用程式。其中,中間件是ZendFramework中的重要概念,它可以幫助我們實現全文搜尋和分頁功能。本文將介紹如何在ZendFramework中使用中間件來實作這兩個功能,並提供程式碼範例。一、全文搜尋功能全文搜尋是現代應用程式中常見的功能之一。

ZendFramework是一個基於PHP的開源框架,提供了許多功能強大的工具和元件,用於建立可擴展的網路應用程式。本文將介紹如何使用ZendFramework的中間件來為Web應用程式新增社群登入功能。中間件是一種在請求進入應用程式之前或之後執行的程式碼。它允許開發人員在處理請求的過程中進行自訂和擴展。 ZendFramework提供了一個靈活的方式來

ZendFramework中間件:為應用程式添加支付寶和微信支付功能引言:隨著行動支付的普及,支付寶和微信支付已經成為了許多應用程式中必不可少的支付方式。本文將介紹如何使用ZendFramework中間件來為應用程式新增支付寶和微信支付功能。透過本文的學習,您將了解如何使用中間件來簡化支付流程,並且可以運用到您的實際專案當中。一、準備工作在開始前,您

ZendFramework2是一種流行的PHP程式框架,它提供了豐富的功能和模組,讓PHP開發者可以更方便地建立高品質的Web應用程式。本文將介紹一些常見的ZendFramework2操作,幫助您更好地使用這個框架。 MVC模式在ZendFramework2中,Model-View-Controller(MVC)模式是最常見的架構。 MVC模式是一

當你決定要發展ERP系統時,選擇一個適合的框架是至關重要的。這裡我們將比較CodeIgniter和ZendFramework這兩個PHP框架,幫助你找到更適合你的ERP系統所開發的框架。 CodeIgniter和ZendFramework是頗受歡迎的PHP框架。它們都提供了許多功能,並具有擴展性和可維護性。然而,這兩個框架在某些方面存在明顯不同,更適合於某些應
