MVC控制器(ZendController).ppt
《MVC控制器(ZendController).ppt》由会员分享,可在线阅读,更多相关《MVC控制器(ZendController).ppt(40页珍藏版)》请在三一办公上搜索。
1、第3章 MVC控制器(Zend_Controller),MVC控制器Zend_Controller组件是Zend Framework中实现MVC模式的灵魂。它是Zend Framework的MVC体系中最核心的部分。本章来介绍Zend_Controller组件的使用。通过本章内容,读者对于如何使用Zend_Controller控制器以及使用Zend Framework编写MVC模式的程序会有一个深刻的认识。,3.1 Zend_Controller入门,Zend_Controller是Zend Framework的MVC体系的核心部分。MVC指Model-View-Controller,是一个用
2、于分离应用逻辑和表现逻辑的设计模式。Zend_Controller组件中的Zend_Controller_Front(前端)类实现了前端控制器设计模式。在该种设计模式下所有的请求都通过前端控制器(front controller)并分发(dispatch)到不同的控制器来处理,分发的过程基于请求的URL。Zend_Controller体系具有可扩展性,可以通过继承已有的类或者自己写个新的类来实现各种接口和抽象类,也可以编写插件或者助手类(helper)来增强系统的功能。,3.1.1 目录结构,使用Zend_Controller进行MVC编程,需要使用特定的目录结构。,3.1.2 创建入口程序,
3、使用Zend_Controller进行MVC编程,首先需要创建一个Bootstrap。所谓Bootstrap,就相当于一小段引导程序或者入口程序。在Zene Framework中,通常指index.php。因为所有的请求都是从index.php进入的。在设置好.htaccess文件之后,建立一个新的文件index.php,并输入以下代码。?phprequire_once Zend/Controller/Front.php;Zend_Controller_Front:run(./application/controllers);这是一个入口文件,目的在于启动Zend_Controller_Fro
4、nt。Zend_Controller_Front,用于分配请求到不同的控制器。,3.1.3 创建默认的控制器,在讨论控制器之前,应该先理解Zend Framework是如何处理HTTP请求的。默认情况下,URL的第一个部分会映射到一个控制器,第二个部分则映射到控制器类中的Action(即控制器类内部的一个方法)。,3.1.4 创建视图文件,上一小节介绍默认控制器时曾经介绍过,视图脚本(即模板文件)放在application/views/scripts/目录下,而默认的模板是application/views/scripts/index/index.phtml。,3.2 Zend_Control
5、ler基础,Zend_Controller工作流用若干组件来实现。在实际编程过程中不需要完全理解所有组件的工作机制,但简要了解其工作流程也是很有必要的。Zend_Controller工作流程包括以下几类组件。1Zend_Controller_Front(控制器前端)2Zend_Controller_Request_Abstract(控制器请求抽象类)3Zend_Controller_Router_Interface4Zend_Controller_Dispatcher_Interface5Zend_Controller_Action6Zend_Controller_Response_Abstr
6、act,3.3 前端控制器,Zend_Controller_Front实现了模型-视图-控制器(MVC)应用程序的前端控制器模式。目的在于初始化请求环境,并接收路由到来的请求,接着分发任何发现的动作;收集所有的响应,在整个过程完成时将响应内容返回。Zend_Controller_Front也实现了单件(Singleton)模式,意味着任何时候,都只可能有一个有效实例。这使得它可以作为注册表,供分发过程中的其他对象引用。Zend_Controller_Front自己注册了一个插件经纪人类(plugin broker),允许插件观测它所触发的各种事件。大多数情况下,这将使得开发人员有机会裁剪站点的
7、分发过程,而无需通过扩展前端控制器增加功能。前端控制器至少需要一个或多个包含动作控制器的目录的路径来完成工作。还有大量的方法可供其调用,进一步处理前端控制器以及相应的助手类。,3.3.1 常用方法,前端控制器有很多建立其环境的访问器。但是,有三个是开启前端控制器功能的主要方法:getInstance()方法、setControllerDirectory()和addControllerDirectory()方法、dispatch()方法,下面分别介绍这些方法。1getInstance()方法2setControllerDirectory()方法和 addControllerDirectory()
8、方法3dispatch()方法4run()方法,3.3.2 环境访问器方法,除了上节所列的方法以外,还有很多访问器方法可以影响前端控制器环境因而也影响前端控制器代理(delegate)的类的环境。这些方法主要有以下几类。resetInstance()方法(set|get)DefaultControllerName()方法(set|get)DefaultActionName()方法(set|get)Request()方法(set|get)Router()方法(set|get)BaseUrl()方法(set|get)Dispatcher()方法(set|get)Response()方法regist
9、erPlugin方法unregisterPlugin($plugin)方法throwExceptions($flag)方法returnResponse($flag)方法,3.3.3 前端控制器参数,前端控制器可以用做各种控制器组件的注册表。它通过一个“param”家族的方法来事先。这些方法允许通过前端控制器注册任意类型的数据对象和变量,可以在分发链中的任何时候获取。这些变量被传递到路由器、分发器以及动作控制器。这些方法包括以下几类。setParam($name,$value)方法setParams(array$params)方法getParam($name)方法getParams()方法cle
10、arParams()方法,3.3.4 继承前端控制器,要继承前端控制器,至少需要覆盖getInstance()方法。,3.4 请求对象,请求对象是在前端控制器、路由器、分发器以及控制类间传递的简单值对象。请求对象封装了请求的模块、控制器、动作以及可选的参数,还包括其他的请求环境,如HTTP、CLI、PHP-GTK(等)。,3.4.1 访问请求对象,可以通过以下方法来对请求对象进行访问。模块名可通过getModuleName()方法和setModuleName()方法访问。控制器名可通过getControllerName()方法和setControllerName()方法访问。控制器调用的动作名
11、称可通过getActionName()方法和setActionName()方法访问。可选参数是一个键值对的关联数组。该数组可通过getParams()方法和setParams()方法获取及设,3.4.2 访问HTTP请求数据,Zend_Controller_Request_Http封装了对相关值的访问,如控制器和动作路由器变量的键名和值、从URL解析的附加参数等。该类还允许访问作为公共成员的超全局变量,管理当前的基地址(Base URL)和请求URI。超全局变量不能在请求对象中赋值,但可以通过setParam()方法/getParam()方法设定/获取用户参数。,3.4.3 访问HTTP请求基
12、地址与子目录,Zend_Controller_Request_Http允许在子目录中使用Zend_Controller_Router_Rewrite(重定向)。Zend_Controller_Request_Http试图自动地检测基地址,并进行相应的设置。,3.4.4 子类化请求对象,所有请求对象的基请求类是抽象类Zend_Controller_Request_Abstract。,3.5 路由器的使用,Zend_Controller_Router_Rewrite是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数来决定哪个模块、哪个
13、控制器和控制器中的哪个动作应该接受请求。模块、控制器、动作和其他参数被打包到Zend_Controller_Request_Http对象。接着这个对象由Zend_Controller_Dispatcher_Standard来处理。路由只发生一次:当请求最初被接收和第一个控制器被派遣之前。,3.5.1 路由器的工作环境,Zend_Controller_Router_Rewrite被设计来考虑使用纯php结构时mod_rewrite-like的功能性。该组件可以非常宽松地基于Ruby on Rails(Ruby On Rails是一个用于编写网络应用程序的软件包。它基于一种计算机软件语言Ruby,
14、给程序开发人员提供了强大的框架支持。开发者可以用比以前更少的代码和更短的时间编写出网络软件),并且不要求任何先前的Web服务器URL rewriting的知识。,3.5.2 使用路由器,为正确使用rewrite路由器,必须对其进行初始化操作。创建路由器可以通过前端控制器实例的getRouter()方法来实现。该方法不需要任何参数,直接进行调用即可。执行该方法可以返回一个Zend_Controller_Router_Rewrite对象。在创建过路由器之后还需要添加一些用户定义的路由并注入到控制器。该项操作,可以通过Zend_Controller_Router_Rewirite对象的addRout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MVC 控制器 ZendController

链接地址:https://www.31ppt.com/p-6512836.html