zf工作流程
来源:互联网 发布:剑网三谢云流捏脸数据 编辑:程序博客网 时间:2024/04/29 04:53
Zend_Controller是使用MVC模式来构建一个站点的基础。Zend_Controller体系是一个轻量的,模块化和可扩展的体系。它只提供最核心的必要的部分,允许开发者有很大的自由来灵活地构建自己的站点。使用Zend_Controller的站点,其文件组织和代码结构会比较相似。 Zend_Controller 的工作流(workflow)是通过几个组件来实现的。虽然不需要完全理解这几个组件的含义,如果你对工作流程有点了解是很有帮助的。 Zend_Controller_Front是Zend_Controller_Controller体系的组织者,它是FrontController设计模式的实现。Zend_Controller_Front处理服务器接受的所有请求,并最后负责将请求分配给各个ActionController(Zend_Controller_Action) Zend_Controller_Request_Abstract用于处理用户请求,提供各种类方法来设置和获得Controller和action的名称及各种请求的参数。另外,它可以跟踪其中的action是否已经被Zend_Controller_Dispatcher分配。本抽象类的子类可用于封装整个请求环境,允许router从中获取用户请求相关信息,或设置controller和action的名称。 Zend Framework默认使用Zend_Controller_Request_Http类来处理用户请求,该类可用于访问HTTP请求相关信息(用户请求不一定通过HTTP,那么就需要你自己实现相关的类–Haohappy注), Zend_Controller_Router_Interface用于定义router。路由是将检查用户请求并决定由哪一个controller,和其中哪一个 Action来接受请求的过程。request对象中的Controller,action和可选的参数将被Zend_Controller_Dispatcher处理。路由只发生一次:当请求被服务器接收到时,在分配到第一个控制器之前。 (所谓router,和我们熟知的网络路由器的功能是很相似的,具有判断网络地址和选择路径的功能,这里就是用来定位到某个控制器中的某个方法 –Haohappy注) 默认的router是Zend_Controller_Router,它将一个Zend_Controller_Request_Http指定的URI分解成controller,action和参数。例如:URLhttp://localhost/foo/bar/key/value将被分解成foo controller, bar action,并带有参数key,参数值为value. Zend_Controller_Dispatcher_Interface接口用于定义dispatcher(分配器,或称调度器、派遣器等)。 “分配”是指从request对象中获取controller和action的名称,并映射到controller文件/类及其中action类方法的过程。如果controller或action不存在,会将请求分配到默认的控制器和方法进行处理。 实际上分配过程包括初始化controller类和调用类方法。和路由不一样,路由只发生一次,而分配是一个循环发生的过程。如果request对象的分配状态被重设为false,则循环就会重复,调用request中设置的方法。如果request对象的分配状态被设置成true,则分配过程结束。 默认的dispatcher是Zend_Controller_Dispatcher。它规定了控制器类命名首字母大写,并以Controller结尾,而action方法则是首字母小写,以Action结尾,例如: SomeFooController::barAction. 在例子中,控制器是somefoo,而action是bar. 另外,在加载一个控制器的时候,你可以指定一个module(模块)。有了module,我们可以将controller放在一个子目录中,而不用全部放在controllers目录下。要使用module,可以在front controller中设置参数 useModules: 在上面的例子中,我们指定了’user’模块,并调用其中的news控制器。dispatcher会将其解释成User_NewsController类,并在User/NewsController.php文件中寻找该类。 Module非常有用,当你想把代码分散到子目录中去的时候,或者使用第三方代码时,或者在不同的应用中重用相同的控制器时。 Zend_Controller_Action是最基本的控制器。每个具体的控制器都是从Zend_Controller_Action类继承而来,是Zend_Controller_Action的子类,并且有自己的action方法。 Zend_Controller_Response_Abstract定义了基础的响应类,用于收集并返回action的响应,包括响应的头部(header)和主体(body),由于它使用了 __toString()方法,所以可以直接用echo来一次性输出所有header和内容。 默认的响应类是Zend_Controller_Response_Http,它很适合于HTTP环境下使用。 Zend_Controller的工作流程相当简单。Zend_Controller_Front接收一个请求,然后由Zend_Controller_Router来决定分配给哪个controller。Zend_Controller_Router把URI分解,便于设定请求中的controller和action的名称。Zend_Controller_Front接着进入一个分配循环,调用Zend_Controller_Dispatcher,把dispatcher传给request,来调用请求中指定的具体的(或默认的)controller和action进行处理。在controller结束后,又把控制权交加给 Zend_Controller_Front。如果controller发现需要调用另一个controller(request的分配状态被清零),循环会一直继续直到另一次分配执行完毕。
$front->setParam(‘useModules’, true);
举个例子,看下面的URL:
http://example.com/user/news/action
- zf工作流程
- ZF
- ZF
- 解析下zf工作目录下的init_autoloader.php
- 工作流程
- 工作流程
- 工作流程
- 工作流程
- 工作流程
- struts2工作原理 工作流程
- 使zf在不支持rewrite功能下能正常工作的各种办法
- flash工作流程设计
- jBPM工作流程定义
- 小议团队工作流程
- OpenGL工作流程
- W3C工作流程
- Struts工作流程
- jBPM工作流程定义
- Build a RESTful Web service using Jersey and Apache Tomcat
- GSM可以说的秘密(4) Provisioning与CDR处理,一个硬币的两面
- 2.1.4 printk打印消息机制
- 超链接的4个CSS属性的正确顺序
- 让您感动感悟一生的话语!
- zf工作流程
- sleep synchronized wait notify notifyAll
- Environmental Pollution
- 一个简单的回调函数模型
- 我的第一篇文章~
- smarty 对数据库的简单操作。
- 8086指令系统及易错点
- 重新开始!
- c/c++ 文件复制(拷贝)