Zend的MVC机制使用分析(二)

 更新时间:2013年05月02日 10:38:31   作者:  
本篇文章介绍了,Zend的MVC机制使用分析,需要的朋友参考下

接着上面的一篇


把代码贴上来

复制代码 代码如下:

$front = Zend_Controller_Front::getInstance();
Zend_Layout::startMvc(array('layoutPath' => USVN_LAYOUTS_DIR));

$front->setRequest(new Zend_Controller_Request_Http());
$front->throwExceptions(true);
$front->setBaseUrl($config->url->base);

$router = new Zend_Controller_Router_Rewrite();
$routes_config = new USVN_Config_Ini(USVN_ROUTES_CONFIG_FILE, USVN_CONFIG_SECTION);
$router->addConfig($routes_config, 'routes');
$front->setRouter($router);
$front->setControllerDirectory(USVN_CONTROLLERS_DIR);

$front->dispatch();

上一篇把前两句getInstance和startMvc两个函数已经读完了,下面是继续分析后面的代码

setRequest($request) 这里是判断request是否是继承自Zend_Controller_Request_Abstract,如果是的话就把front的_request赋值为它。

这里需要了解下什么是Zend_Controller_Request_Abstract,它是所有request抽象出来的抽象类。Zend已经提供了两个实现类,Zend_Controller_Request_Http和Zend_Controller_Request_Simple,一般我们搭建服务器都是http请求,所以你的项目如果需要重新继承的话,一般都直接继承Zend_Controller_Request_Http。

Zend_controller_Request_Http中我们经常会使用到的getQuery,getCookie,getRequestUri,getBasePath,getParams,getHeader等这些Http通常的选项都已经有了。

继续讲它的基类Zend_Controller_Request_Abstract,这个类的方法包含:

回到代码
 

$front->setRequest(new Zend_Controller_Request_Http());这里调用了Zend_Controller_Request_Http的构造函数,构造函数在第一次调用的时候是$this->setRequestUri();其中的setRequestUri很多都是直接使用$_SERVER这个php全局变量中的数据来获取requestUri的。

setRequestUri可以学到的是在不同的服务器中如何获取requestUri(特别是在IIS中的$SERVER中不同的变量组合有不同的含义),比如http://172.23.11.160/usvn/item/usvn_test 这个url,它的requestUri就是/usvn/item/usvn_test

 

$front->throwExceptions(true); 将内部的_throwExceptions标志位设置为true;

$front->setbaseUrl("/usvn")这个做了两件事情,首先是设置front内部的_baseUrl属性,其次调用Request的setBaseUrl,也是设置Zend_Controller_Request_Http的内部_baseUrl属性。


$router = new Zend_Controller_Router_Rewrite();

$routes_config = new USVN_Config_Ini(USVN_ROUTES_CONFIG_FILE, USVN_CONFIG_SECTION);

$router->addConfig($routes_config, 'routes');

$front->setRouter($router);

下面这三行就直接说,实际上就是使用Zend的Router模块使用配置文件,router使用setRouter放入front里面。


最后一句


$front->dispatch();

这个函数也是最核心的一个函数。

这个函数首先注册了一个插件Zend_Controller_Plugin_ErrorHandler,index为100,把插件的顺序放在最后。

 

第二步存放了一个Helper,Zend_Controller_Action_Helper_ViewRenderer,index为-80

下面实例化了request,request是一个Zend_Controller_Request_Http类型。并将request的baseUrl设置为前面设置过的_baseUrl,就是"/usvn/item/usvn_test"

接着实例化了response,response是一个Zend_Controller_Response_Http();

下面使用plugins来对Request和Response进行设置,首先实际调用了Zend_Controller_Plugin_Broker的setRequest函数,这个函数循环遍历broker管理的所有插件,调用插件的setRequest($request)函数(如果有的话)。

 

接下来初始化router,和设置router的参数。router已经在前面设置过了,就是Zend_Controller_Router_Rewrite类型

初始化分发器dispatcher,分发器我们是第一次看到,Zend_Controller_Dispatcher_Standard类。分发器以后再说。


下面的流程:

调用插件的routeStartup对request进行处理

调用router的route处理request

调用插件的routeShutdown对request进行处理

调用插件的dispatchLoopStartup对request进行处理

进入循环分发过程

调用插件的preDispatch对request进行处理

调用dispatcher的dispatch处理request和response

调用插件的postDispatch对request进行处理

跳出循环分发过程

调用插件的dispatchLoopShutdown对request进行处理

发送response

相关文章

  • php实现微信公众号企业转账功能

    php实现微信公众号企业转账功能

    这篇文章主要为大家详细介绍了php实现微信公众号企业转账功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • PHP实现文件下载详解

    PHP实现文件下载详解

    本文从php实现下载的原理到具体的实现代码,再到有可能出现的问题,以及使用其他方式实现的文件下载的代码分享,都做了详细说明,给有需要的小伙伴们参考下
    2014-11-11
  • Yii2中SqlDataProvider用法示例

    Yii2中SqlDataProvider用法示例

    这篇文章主要介绍了Yii2中SqlDataProvider用法,结合实例形式分析了Yii2框架中使用SqlDataProvider类操作数据库的相关技巧,需要的朋友可以参考下
    2016-09-09
  • PHP文件系统管理(实例讲解)

    PHP文件系统管理(实例讲解)

    下面小编就为大家带来一篇PHP文件系统管理(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • thinkphp5.1 文件引入路径问题及注意事项

    thinkphp5.1 文件引入路径问题及注意事项

    这篇文章主要介绍了thinkphp5.1 文件引入路径问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Yii中Model(模型)的创建及使用方法

    Yii中Model(模型)的创建及使用方法

    这篇文章主要介绍了Yii中Model(模型)的创建及使用方法,结合实例形式较为详细的分析了Yii中模型的基本创建技巧,使用方法及相关注意事项,需要的朋友可以参考下
    2015-12-12
  • ThinkPHP访问不存在的模块跳转到404页面的方法

    ThinkPHP访问不存在的模块跳转到404页面的方法

    这篇文章主要介绍了ThinkPHP访问不存在的模块跳转到404页面的方法,需要的朋友可以参考下
    2014-06-06
  • swoole和websocket简单聊天室开发

    swoole和websocket简单聊天室开发

    这篇文章主要为大家详细介绍了swoole和websocket简单聊天室开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • ThinkPHP5.1框架页面跳转及修改跳转页面模版示例

    ThinkPHP5.1框架页面跳转及修改跳转页面模版示例

    这篇文章主要介绍了ThinkPHP5.1框架页面跳转及修改跳转页面模版,结合实例形式分析了thinkPHP5.1框架进行页面跳转及修改跳转模板相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Yii redis集合的基本使用教程

    Yii redis集合的基本使用教程

    这篇文章主要给大家介绍了关于Yii redis集合的基本使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用Yii、redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06

最新评论