目錄
Route Process 路由过程
Token对象
Dispatch Process 分配过程
首頁 php教程 php手册 Zend_Controller的工作原理

Zend_Controller的工作原理

Jun 13, 2016 am 09:38 AM
zend framework

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.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来进行处理。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

在PHP中使用Zend Framework:快速入門指南 在PHP中使用Zend Framework:快速入門指南 Jun 21, 2023 am 08:58 AM

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

透過Zend Framework中介軟體實現高效的資料庫查詢 透過Zend Framework中介軟體實現高效的資料庫查詢 Jul 28, 2023 pm 01:13 PM

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

Zend Framework中間件:為應用程式新增OAuth和OpenID登入支持 Zend Framework中間件:為應用程式新增OAuth和OpenID登入支持 Jul 28, 2023 pm 01:09 PM

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

Zend Framework中間件:實現全文搜尋與分頁功能 Zend Framework中間件:實現全文搜尋與分頁功能 Jul 30, 2023 pm 08:49 PM

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

Zend Framework中間件:為網路應用程式新增社交登入功能 Zend Framework中間件:為網路應用程式新增社交登入功能 Jul 28, 2023 pm 07:21 PM

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

Zend Framework中間件:為應用程式新增支付寶和微信支付功能 Zend Framework中間件:為應用程式新增支付寶和微信支付功能 Jul 28, 2023 pm 08:01 PM

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

PHP程式設計有哪些常見的Zend Framework 2操作? PHP程式設計有哪些常見的Zend Framework 2操作? Jun 12, 2023 am 09:01 AM

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

CodeIgniter vs Zend Framework:哪個框架比較適合開發ERP系統? CodeIgniter vs Zend Framework:哪個框架比較適合開發ERP系統? Jun 19, 2023 am 08:53 AM

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

See all articles