您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > ZendFramework

ZendFramewor组件:Zend_Controller基础

作者:  来源:互联网  日期:2013-10-27 10:05:59
收藏  评论:( 0 )  阅读:516

ZendFramewor组件:Zend_Controller基础

Zend_Controller工作流用若干组件来实现。在实际编程过程中不需要完全理解所有组件的工作机制,但了解其工作流程也是很有必要的。作为zf的开发者,至少也要了解最主要的组件,否则zf分装的这么厉害,你根本不知道是怎么个情况,整天云里雾里的,只是知其然,不知其所以然。其实,大家简单了解以下几个组件即可:(Zend_Controller工作流程中的几个重要组件)。

1.Zend_Controller_Front(前端控制器)

2.Zend_Controller_Router_Interface(路由分发)

3.Zend_Controller_Dispatcher_Interface(开始执行)

4.Zend_Controller_Request_Abstract(控制器请求抽象类)

5.Zend_Controller_Action(每个控制器必须继承此类,zf默认找Zend_Controller_Action或者其子类。没有继承:报错Page not found)

6.Zend_Controller_Response_Abstract(控制器响应抽象类) 此文参考文档-《Zend Framework技术大全》

(一)Zend_Controller_Front(前端控制器)

Zend_Controller_Front实现了模型-视图-控制器(MVC)应用程序的前端控制器模式。目的在于初始化请求环境,并接收路由到来的请求,接着分发任何发现的动作;收集所有的响应,在整个过程完成时将响应内容返回。 Zend_Controller_Front也实现了单件(Singleton)模式,意味着任何时候,都只可能有一个有效实例。这使得它可以作为注册表,供分发过程中的其他对象引用。 Zend_Controller_Front自己注册了一个插件经纪人类(plugin broker),允许插件观测它所触发的各种事件。大多数情况下,这将使得开发人员有机会裁剪站点的分发过程,而无需通过扩展前端控制器增加功能。 前端控制器至少需要一个或多个包含动作控制器的目录的路径来完成工作。还有大量的方法可供其调用,进一步处理前端控制器以及相应的助手类

1)常用方法

前端控制器有很多建立其环境的访问器。但是,有三个是开启前端控制器功能的主要方法:getInstance()方法、setControllerDirectory()和addControllerDirectory()方法、dispatch()方法,下面分别介绍这些方法。

1.getInstance()方法
2.setControllerDirectory()方法和  addControllerDirectory()方法
3.dispatch()方法
4.run()方法


2) 环境访问器方法

除了上节所列的方法以外,还有很多访问器方法可以影响前端控制器环境——因而也影响前端控制器代理(delegate)的类的环境。这些方法主要有以下几类。

resetInstance()方法
(set|get)DefaultControllerName()方法
(set|get)DefaultActionName()方法
(set|get)Request()方法
(set|get)Router()方法
(set|get)BaseUrl()方法
(set|get)Dispatcher()方法
(set|get)Response()方法
registerPlugin方法
unregisterPlugin($plugin)方法
throwExceptions($flag)方法
returnResponse($flag)方法


3) 前端控制器参数

前端控制器可以用做各种控制器组件的注册表。它通过一个“param” 家族的方法来事先。这些方法允许通过前端控制器注册任意类型的数据——对象和变量,可以在分发链中的任何时候获取。这些变量被传递到路由器、分发器以及动作控制器。这些方法包括以下几类。

setParam($name, $value)方法
setParams(array$params)方法
getParam($name)方法
getParams()方法
clearParams()方法


(二)请求对象

请求对象是在前端控制器、路由器、分发器以及控制类间传递的简单值对象。请求对象封装了请求的模块、控制器、动作以及可选的参数,还包括其他的请求环境,如HTTP、CLI、PHP-GTK(等)。

1)

可以通过以下方法来对请求对象进行访问。

模块名可通过getModuleName()方法和setModuleName()方法访问。

控制器名可通过getControllerName()方法和setControllerName()方法访问。

控制器调用的动作名称可通过getActionName()方法和setActionName()方法访问。

可选参数是一个键值对的关联数组。该数组可通过getParams()方法和setParams()方法获取及设

(三) 路由器的使用

Zend_Controller_Router_Rewrite是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数来决定哪个模块、哪个控制器和控制器中的哪个动作应该接受请求。模块、控制器、动作和其他参数被打包到Zend_Controller_Request_Http对象。接着这个对象由Zend_Controller_Dispatcher_Standard来处理。路由只发生一次:当请求最初被接收和第一个控制器被派遣之前。

1) 路由器的工作环境

Zend_Controller_Router_Rewrite被设计来考虑使用纯php结构时mod_rewrite-like的功能性。该组件可以非常宽松地基于Ruby on Rails(Ruby On Rails是一个用于编写网络应用程序的软件包。它基于一种计算机软件语言Ruby,给程序开发人员提供了强大的框架支持。开发者可以用比以前更少的代码和更短的时间编写出网络软件),并且不要求任何先前的Web服务器URL rewriting的知识。

2) 使用路由器

为正确使用rewrite路由器,必须对其进行初始化操作。创建路由器可以通过前端控制器实例的getRouter()方法来实现。该方法不需要任何参数,直接进行调用即可。执行该方法可以返回一个Zend_Controller_Router_Rewrite对象。

在创建过路由器之后还需要添加一些用户定义的路由并注入到控制器。该项操作,可以通过Zend_Controller_Router_Rewirite对象的addRoute()方法来实现,该方法的语法格式如以下代码所示。

addRoute($name,$route)

3) 四种基本路由

1.缺省路由

2.标准框架路由

3.静态路由

4.正则表达式路由

4) 基本的路由操作

RewriteRouter的核心是用户定义路由的定义。路由通过调用RewriteRouter的addRoute方法并传递一个由类实现的Zend_Controller_Router_Route_Interface实例被添加。上一节的代码3-2.php中对该方法有所涉及。

Rewrite路由器带有四个基本类型的路由(其中一个是特殊的):

Zend_Controller_Router_Route,框架路由;

Zend_Controller_Router_Route_Static,静态路由;

Zend_Controller_Router_Route_Regex,正则路由;

缺省路由。




除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/zend/456.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论
UncleToo,一档有态度的PHP中文网

图片教程