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 // 顯示運行時的錯誤,可填