Zend_Application可谓是Zend MVC框架中几大重要模块之一,入口文件index.php一开始读取的时候就须要加载Zend_Application。
让咱们从一个Zend框架项目开始会作些什么操做来分析,
首先
就是会读取index.php文件里面的内容这个毫无疑问,在index.php文件里面有
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/config/application.ini'
);
$application->bootstrap()
->run();
这里就是开始加载一些application的配置参数,让咱们都看看其作了些什么
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/config/application.ini'
);
查看Zend/Application.php 可知道这是开始构造一个类,这个构造函数有两个参数,
&& APPLICATION_ENV :
一个Application的环境,这个就是读取.ini文件下[production],[development : production]等这几个开发环境中咱们选择的一个,通常默认咱们选择的是[production]
&& APPLICATION_PATH.'/config/application.ini'
: 就是咱们外部引入的一个配置文件,这里配置文件的格式还能够是一个数组,一个Zend_Config实例并且还能够是xml,json等格式的文件,可是咱们都习惯性使用.ini格式,。
Zend/Application.php该构造函数除了定义环境以外,还初始化了Zend_Load_Autoloader单列,将在ini里面的一些参数进行自动加载配置。
到这里已经建立了Zend_Application实例并配置了一些参数,接下来
$application->bootstrap()就是对其进行引导,查看Zend_Application中bootstrap()方法可得知,Zend将引导方法给了
Zend_Application_Bootstrap_BootstrapAbstract,可是Zend_Application和
Zend_Application_Bootstrap_BootstrapAbstract是聚合关系,二者各有联系并相互通信。调用bootstrap()方法的时候会实例化
Zend_Application_Bootstrap_BootstrapAbstract的一个子类对象(
Zend_Application_Bootstrap_Bootstrap
),
Zend_Application_Resource这里包含了一系列的引导资源,
引导资源类实现了 Zend_Application_Resource_Resource接口,继承自 Zend_Application_Resource_ResourceAbstract,这些资源均可以在ini文件里面设置,
Zend_Application把bootstrap()方法转发给 Zend_Application_Bootstrap_Bootstrap ,在Zend_Application_Bootstrap_Bootstrap的bootstrap()中,遍历注册了的引导资源的并调用引导的 init()方法。
。
配置文件(通常是configs/application.ini)可使用并配置的资源基本有一下几项
Zend_Application_Resources:
* Zend_Application_Resources_Db
* Zend_Application_Resources_Frontcontroller
* Zend_Application_Resources_Layout
* Zend_Application_Resources_Locale
* Zend_Application_Resources_Log
* Zend_Application_Resources_Mail
* Zend_Application_Resources_Modules
* Zend_Application_Resources_Navigation
* Zend_Application_Resources_Router
* Zend_Application_Resources_Session
* Zend_Application_Resources_View
Zend_Application_Resources_Frontcontroller
手册里一些配置参数
&& controllerDirectory : 配置controller的路径,通常在单模块的时候使用
&& moduleDirectory : 多模块的时候配置模块的入口路径
&& moduleControllerDirectoryName : 多模块的时候配置每一个模块控制器的目录
&& defaultControllerName : 多模块时候默认控制器的名字,通常是 index
&& defaultAction : 多模块默认Action的名字,通常也是index
&& defaultModule : 多模块下默认模块的路径 ,通常是default
&& baseUrl : 设置基本url通常是自动检测
&& plugins : 插件的配置
&& params : 一些额外的参数
通常单模块的话控制器会这样的配置
resources.frontController.controllerDirectory= APPLICATION_PATH
"/controllers"
这也至关于在index.php或者在Bootstrap.php文件的
若是是多模块的话
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" //将模块指向 application/modules 目录下,必填
resources.frontController.moduleControllerDirectoryName = "controllers" // 指示模块下controller的路径,必填
resources.frontController.
params.prefixDefaultModule = 1 //
当咱们使用了模块后,咱们在非默认模块的的动做控制器中须要遵循一个防止命名控制冲突的不一样的命名协议。所以,在咱们的例子中,全部在product模块中的动做控制器Action Controllers都须要增长一个Product的命名空间,例如,Product模块中的detail的动做控制器应当命名成Product_DetailsController,但对于默认模块(default(global) modules)中的动做控制器则不须要,例如,default模块中的detail的动做控制器应该命名成DetailsController,然而,咱们经过设置
prefixDefaultModule
变量可以改变这种默认的行为,
经过这样,咱们的default模块中的全部动做控制器(如detail动做控制器)都应该加上模块前缀,即Default_(Default_DetailsController,可填
resources.frontController.params.useDefaultControllerAlways = 1 //估计若是没设置的话应该也是一直使用默认控制器,此处不是很明白,可填
resources.frontController.params.displayExceptions = 0 // 显示运行时的错误,可填