2.2. Zend_Controller 基础
Zend_Controller系统被设计为轻量、模块化、和可扩展的系统。虽然它提供了足够多的功能结构让你的系统建立在Zend_Controller之上并共享通用的约定和相似的代码设计,但它是一个最低要求的设计,给用户最大的灵活性和自由度。

以下图表描述了工作流,下面的说明中详细介绍了之间的交互
Zend_Controller工作流用若干组件来实现。虽然不需要完全理解所有组件的基础知识来使用它,但是拥有工作流程的知识很有帮助。

Zend_Controller_Front 控制了Zend_Controller系统的整个工作流。
它是前端控制器(FrontController)模型的解释。Zend_Controller_Front处理所有由
服务器接收的请求并负责把请求派发给动作控制器(ActionControllers)(Zend_Controller_Action)。 Zend_Controller_Request_Abstract (often referred to as the Request Object)
描述请求环境和提供设置和读取控制器和
动作名字以及任何请求参数的方法。另外它
跟踪它所包含的动作是否被Zend_Controller_Dispatcher
派遣。抽象请求对象的扩展可被用来封装整个请求环境,
为了设置控制器和动作的名字,它允许路由器从请求环境
中读出信息。 缺省地,Zend_Controller_Request_Http
被用来访问整个HTTP请求环境。 Zend_Controller_Router_Interface用来定义路由器。
路由是个过程,在这个过程中它通过检查请求环境来决定
哪个个控制器和哪个控制器中的动作应该接受请求。控制器、
动作和可选的参数就通过Zend_Controller_Dispatcher_Standard处理来设置
在请求对象中。路由只发生一次:在最初收到请求并在第
一个控制器被派遣之前。 缺省路由器,Zend_Controller_Router_Rewrite,
从Zend_Controller_Request_Http取出URI的
终点作为参数并基于在url中的路径信息分解成控制器、
动作和参数。作为一个例子,URL http://localhost/foo/bar/key/value将被解析为foo控制器、
bar 动作和带有一个值value的参数key。 Zend_Controller_Router_Rewrite也可以用来
匹配任意的路径;参见路由器文档 有更多的信息。 Zend_Controller_Dispatcher_Interface
被用来定义派遣器。派遣是个过程,在这个过程中它
从请求对象中取出控制器和动作并映射它们到
控制器文件/类和在控制器中的动作方法。
如果控制器和动作不存在,它派遣缺省的控制器和动作。 实际的派遣过程包括初始化控制器类和在这个类中调用动作方法
。不像路由,只发生一次,派遣是循环发生的。
如果请求对象的派遣状态在任何点上重置,循环将被重复,
调用不论哪个当前在请求对象中的动作。
第一次循环随请求对象的派遣状态设置(布尔 true)完成,它将完成处理。 缺省的派遣器是Zend_Controller_Dispatcher_Standard。
它定义控制器为以Controller结尾的 MixedCasedClasses,
并且动作为以Action结尾的camelCasedMethods:FooController::barAction()。
在这个例子中,控制器是foo,动作是the action as bar。
大小写命名协议
因为人们经常在大小写上犯错误,所以Zend Framework把路径信息标准化为小写。
当然,这会影响你来命名控制器和动作或指向它们的链接。 如果你想使你的控制器类和动作方法名称有多个混合大小写字或驼峰字,
你需要在url中使用'-'或'.'来把它们分开
(尽管你可以配置使用的字符)。 作为例子,如果你打算用FooBarController::bazBatAction(),
那么在url中链接时要用/foo-bar/baz-bat
或/foo.bar/baz.bat。 
Zend_Controller_Action是基本的动作控制器组件。
每个控制器是一个从Zend_Controller_Action class
扩展的单个的类并且应该包含一个或更多的动作方法。 Zend_Controller_Response_Abstract定义了
一个基本的响应类,用来从动作控制器收集和返回响应。
头和body的内容它都收集。 缺省的响应类是Zend_Controller_Response_Http,
它适合用于HTTP环境。
Zend_Controller的工作流相当简单。
请求被Zend_Controller_Front接收,
然后它调用Zend_Controller_Router_Rewrite
来决定哪个控制器(和控制器中的动作)被派遣。
为了在请求中设置控制器和动作名字Zend_Controller_Router_Rewrite分解URI。Zend_Controller_Front接着进入一个派遣循环。
它调用Zend_Controller_Dispatcher_Standard,
传递给它请求,派遣在请求(或使用缺省的)
中指定的控制器和动作。在控制器完成之后,
控制返回到Zend_Controller_Front。
如果控制器通过重置请求派遣状态指示其它的控制器应该被派遣,
循环将继续并且其它派遣被执行。否则,处理结束。

2.2 Zend_Controller 基础相关推荐

  1. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  2. 提交表单自动刷新_Web自动化测试:元素的基础操作和浏览器基础操作

    上一节,我们了解了如何定位元素,其实也有涉及对于元素的操作,这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 一.对于元素的基础操作: clear():清除输入框内的文本 send_ke ...

  3. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  4. 【J2SE】学习基础

    Java基础 语法基础 OO Exception Array 基础类 I/O Stream Collection/Generic Thread TCP/UDP GUI Meta Data Regula ...

  5. 【Linux系统】基础总结

    我不太清楚运维部门具体是做什么的,就接触过一点点运维部门! 也就是是知道他们负责管理服务器,管理网络,管理项目部署 偶尔自己需要部署,不得不接触一些linux命令.简单总结一些基础 linux系统发展 ...

  6. 【Java 2 Platform Enterprise Edition】基础

    问题1:为什么java是无关平台? 你之前用C或者C++写的源代码,编译好后,换一种操作系统,可能就执行不了了.因为新的操作系统不识别,你需要修改你的源码,并在新的操作系统上重新编译才能运行,比如Wi ...

  7. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  8. Redis概述和基础

    Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...

  9. pass基础架构分析

    pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...

  10. LLVM编译器基础架构与DragonEgg示例

    LLVM编译器基础架构与DragonEgg示例 LLVM 概述 LLVM 项目是模块化和可重用的编译器和工具链技术的集合.LLVM 与传统的虚拟机几乎没有关系."LLVM"这个名字 ...

最新文章

  1. android view的隐藏和显示_Android使用Viewpager实现3D卡片翻动效果
  2. python使用imbalanced-learn的RandomOverSampler方法进行上采样处理数据不平衡问题
  3. 思科高级路由与交换(CISCO 部分) 第5天
  4. eclipse没有日志_IPFS技术最新进展:抵抗eclipse攻击的能力
  5. 显示内容长时,显示部分内容,鼠标移入显示全部内容
  6. red hat linux挂载u盘,请问怎样在Red Hat 9.0中使用U盘?
  7. c++ 删除二叉树的子树_平衡二叉树
  8. 如何快速掌握python包_如何快速掌握一个python模块?
  9. Logistic回归模型原理
  10. SpringBoot 日志配置
  11. 佛系青蛙外挂横行,20 元可买 21 亿无限三叶草
  12. Linux stat命令和AIX istat命令 (查看文件修改时间)
  13. ElasticSearch + Canal 开发千万级的实时搜索系统【转】
  14. C# .net+DevExpress自定义控件(UserControl)之分页控件
  15. 你以为链家只是一个中介,但其实……
  16. excel表格打印每页都有表头_如何给将要打印的excel表格设置统一的表头
  17. java 九九乘法口诀
  18. MATLAB模拟陀螺仪的运动轨迹(附完整代码)
  19. 常见的连续型随机变量分布
  20. Unity抗锯齿设置

热门文章

  1. LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法
  2. MyEclipse 6.0 注册码
  3. ue4 点击启动_4399游戏2020届校招启动
  4. 强烈推荐asp.net数据访问的官方指南系列 (Data Access Tutorials)
  5. Linux_创建母版,快速克隆,如何移动虚拟机.ziw
  6. PHP处理CSV表格文件的常用操作方法是怎么样呢
  7. 简单算术表达式计算器
  8. 编写0号中断的处理程序
  9. Web系统集成OCS在线状态功能
  10. 良好的XHTML编写习惯