end_Application可謂是Zend MVC框架中幾大重要模塊之一,入口文件index.php一開始讀取的時候就需要加載Zend_Application。
讓我們從一個Zend框架項目開始會做些什么操作來分析,
首先 就是會讀取index.php文件里面的內(nèi)容這個毫無疑問,在index.php文件里面有
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/config/application.ini'
);
$application->bootstrap()
->run();
這里就是開始加載一些application的配置參數(shù),讓我們都看看其做了些什么
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/config/application.ini'
);
查看Zend/Application.php 可知道這是開始構(gòu)造一個類,這個構(gòu)造函數(shù)有兩個參數(shù),
&& APPLICATION_ENV : 一個Application的環(huán)境,這個就是讀取.ini文件下[production],[development : production]等這幾個開發(fā)環(huán)境中我們選擇的一個,一般默認我們選擇的是[production]
&& APPLICATION_PATH.'/config/application.ini' : 就是我們外部引入的一個配置文件,這里配置文件的格式還可以是一個數(shù)組,一個Zend_Config實例而且還可以是xml,json等格式的文件,但是我們都習慣性使用.ini格式,。
Zend/Application.php該構(gòu)造函數(shù)除了定義環(huán)境之外,還初始化了Zend_Load_Autoloader單列,將在ini里面的一些參數(shù)進行自動加載配置。
到這里已經(jīng)創(chuàng)建了Zend_Application實例并配置了一些參數(shù),接下來 $application->bootstrap()就是對其進行引導(dǎo),查看Zend_Application中bootstrap()方法可得知,Zend將引導(dǎo)方法給了 Zend_Application_Bootstrap_BootstrapAbstract,但是Zend_Application和 Zend_Application_Bootstrap_BootstrapAbstract是聚合關(guān)系,兩者各有聯(lián)系并相互通訊。調(diào)用bootstrap()方法的時候會實例化 Zend_Application_Bootstrap_BootstrapAbstract的一個子類對象( Zend_Application_Bootstrap_Bootstrap ), Zend_Application_Resource這里包含了一系列的引導(dǎo)資源, 引導(dǎo)資源類實現(xiàn)了 Zend_Application_Resource_Resource接口,繼承自 Zend_Application_Resource_ResourceAbstract,這些資源都可以在ini文件里面設(shè)置, Zend_Application把bootstrap()方法轉(zhuǎn)發(fā)給 Zend_Application_Bootstrap_Bootstrap ,在Zend_Application_Bootstrap_Bootstrap的bootstrap()中,遍歷注冊了的引導(dǎo)資源的并調(diào)用引導(dǎo)的 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
手冊里一些配置參數(shù)
&& controllerDirectory : 配置controller的路徑,一般在單模塊的時候使用
&& moduleDirectory : 多模塊的時候配置模塊的入口路徑
&& moduleControllerDirectoryName : 多模塊的時候配置每個模塊控制器的目錄
&& defaultControllerName : 多模塊時候默認控制器的名字,一般是 index
&& defaultAction : 多模塊默認Action的名字,一般也是index
&& defaultModule : 多模塊下默認模塊的路徑 ,一般是default
&& baseUrl : 設(shè)置基本url一般是自動檢測
&& plugins : 插件的配置
&& params : 一些額外的參數(shù)
一般單模塊的話控制器會這樣的配置
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 // 當我們使用了模塊后,我們在非默認模塊的的動作控制器中需要遵循一個防止命名控制沖突的不同的命名協(xié)議。因此,在我們的例子中,所有在product模塊中的動作控制器Action Controllers都需要增加一個Product的命名空間,例如,Product模塊中的detail的動作控制器應(yīng)當命名成Product_DetailsController,但對于默認模塊(default(global) modules)中的動作控制器則不需要,例如,default模塊中的detail的動作控制器應(yīng)該命名成DetailsController,然而,我們通過設(shè)置 prefixDefaultModule 變量能夠改變這種默認的行為, 通過這樣,我們的default模塊中的所有動作控制器(如detail動作控制器)都應(yīng)該加上模塊前綴,即Default_(Default_DetailsController,可填
resources.frontController.params.useDefaultControllerAlways = 1 //估計如果沒設(shè)置的話應(yīng)該也是一直使用默認控制器,此處不是很明白,可填
resources.frontController.params.displayExceptions = 0 // 顯示運行時的錯誤,可填