摘要:該文將爲你們簡單介紹一下如何使用zend framework建立模塊化的應用程序。javascript
zend framework對多模塊的支持是很好的,可是多是因爲功能太過強大的緣故,部署起來並非很容易。許多人在使用過程當中都會遇到這樣 那樣的問題,並且zend framework如今已經到1.11版本了,網絡上的不少資料都還停留在舊版本上,所以我在這裏以當前的最新版本1.11爲 例,來簡單介紹一下如何使用zend framework建立模塊化的應用程序。php
一、準備工做css
首先假設你已經部署了web服務器和php,並下載了zend framework的最新版本,建立了一個最原始的zend framework項 目,並能夠訪問默認的action了。你可使用zend framework工具來建立項目,具體操做參見使用zend framework建立項目。 固然也能夠本身手動創建文件夾和文件,參見zend framework推薦的項目目錄結構。html
簡單地看一下默認的幾個重要目錄。java
首先是public,它不但存放了程序的入口點index.php,還能夠存放圖片,css,javascript文件等。web
其次是library,用於存放一些類庫,包括你本身定義的或第三方的類庫。bootstrap
而後是test,用於存放單元測試等測試文件的。服務器
最後,也是和咱們這裏要講的關係最大的目錄application。進到application目錄下,會有如下目錄:configs:存放配置文件,通常會有一個主配置文件application.ini;網絡
controllers:操制器,如默認的IndexController.php;app
models:存放業務邏輯,數據模型等文件;
views:視圖層的腳本,通常以.phtml爲後綴名;
modules:模塊目錄,使用工具默認選項自動生成的是沒有這個目錄的,須要手動添加。modules底下能夠包含多個以模塊名命名的文件夾,如 admin,默認是default,一個文件夾表明一個模塊,其下的目錄結構與application目錄相似,又能夠包 controllers,models,views等目錄。
須要注意的是模塊下的controllers下面的文件的類名請加上模塊名前綴,如application/modules/admin/controllers/IndexController.php的類名爲Admin_IndexController。
若是你須要在項目中方便的使用你本身寫的一些類庫(如名稱空間是Rockux),或是第三方的類庫,能夠修改application.ini文件,添加如下行:
autoloaderNamespaces.rockux =」Rockux_」autoloaderNamespaces.thirdParty =」ThirdPartyLibrary_」
固然你也能夠根據須要多添加幾個,不過請注意最後面的下劃線。
二、創建模塊
如今咱們來建立一個admin模塊,目錄以下:
application/modules/admin/controllers
application/modules/admin/models
application/modules/admin/views
application/modules/admin/views/scripts
application/modules/admin/views/helpers
application/modules/admin/views/filters
並建立如下文件:
application/modules/admin/controllers/IndexController.php(類名爲Admin_IndexController)
application/modules/admin/views/scripts/index/index.phtml
除了新建模塊文件以外,還須要更改配置文件application.ini,刪除如下行,若是有的話:
resources.frontController.controllerDirectory = APPLICATION_PATH」/controllers」
再加上以下行:
resources.frontController.moduleDirectory = APPLICATION_PATH 」/modules」
resources.frontController.moduleControllerDirectoryName =」controllers」
resources.frontController.defaultModule =」default」
resources.modules[]=0
這樣,再訪問http://localhost/webroot/public/admin,應該就能看到admin模塊輸出的內容了。
若是咱們要充分發揮模塊的強大功能,咱們還須要爲模塊添加一個啓動文件Bootstrap.php。它可使得你在事個模塊中方便的使用類資源,models, filters, helpers等。在admin下新建Bootstrap.php,代碼以下:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap{}
而且在application/Bootstrap.php文件里加入如下方法:
protectedfunction _initAppAutoload(){
$autoloader=new Zend_Application_Module_Autoloader(
array( ’namespace’=>’App’,'basePath’=>dirname(__FILE__), )
);
return$autoloader;
}
它將會自動加載models,filters,helpers等到咱們的默認模塊。經過以上設置,咱們就能夠在接下來的controllers裏使用全部這些資源了。
三、設置佈局
這裏主要說明如何配置不一樣的模塊應用不一樣的佈局,關於佈局的概念和基本的用法,請參見官方文檔的建立佈局和Zend_Layout入門。
對於通常頁面,你可能須要使用一個佈局文件,如三行兩列式,而對於admin模塊,你可能須要使用另外一種佈局,如兩列式。要達到這個目的能夠採用兩種方式。
第一種,佈局腳本文件存放在統一的文件夾,如application/layout
能夠在application下新建以下目錄和文件:
application/layouts/scripts/layout.phtml
application/layouts/scripts/admin.phtml
在配置文件application.ini中添加以下幾行:
resources.layout.layoutPath = APPLICATION_PATH 」/layouts/scripts」
resources.layout.layout =」layout」
admin.resources.layout.layout =」admin」
第二種,不一樣模塊的佈局腳本文件分別存放在各自的模塊文件夾下
能夠在application下新建以下目錄和文件:
application/layouts/scripts/layout.phtml
application/modules/admin/layouts/scripts/layout.phtml
在配置文件application.ini中添加以下幾行:
resources.layout.layoutPath = APPLICATION_PATH 」/layouts/scripts」
resources.layout.layout =」layout」
admin.resources.layout.layoutPath = APPLICATION_PATH 」/modules/admin/layouts/scripts」
不管是第一種仍是第二種,這時若是訪問http://localhost/admin,你會發現系統並無使用指望的admin.phtml做爲布 局文件,而是使用了默認的layout.phtml。這是由於admin那行配置並非系統默認能處理的有效配置,因此咱們要本身來處理它。
咱們新建文件:library/Rockux/Controller/Action/Helper/LayoutLoader.php,
針對第一種狀況代碼以下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract{
publicfunction preDispatch() {
$bootstrap=$this->getActionController() ->getInvokeArg(‘bootstrap’);
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layout'])) {
$layoutScript=$config[$module]['resources']['layout']['layout'];
$this->getActionController() ->getHelper(‘layout’) ->setLayout($layoutScript);
}
}
}
針對第二種狀況代碼以下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract{
publicfunction preDispatch() {
$bootstrap=$this->getActionController() ->getInvokeArg(‘bootstrap’);
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layoutPath'])) {
$layoutPath=$config[$module]['resources']['layout']['layoutPath'];
$this->getActionController() ->getHelper(‘layout’) ->setLayoutPath($layoutPath);
}
}
}
接下來咱們還須要將它添加到application/Bootstrap.php裏去
protectedfunction _initLayoutHelper(){
$this->bootstrap(‘frontController’);
$layout= Zend_Controller_Action_HelperBroker::addHelper( new Rockux_Controller_Action_Helper_LayoutLoader());
}
再次訪問http://localhost/webroot/public/admin,應當就能夠看到使用指定的佈局文件了。
若是要針對某個特定的controller使用特定的layout,能夠在controller的init()方法裏添加以下代碼:
$layout= Zend_Layout::getMvcInstance();$layout->setLayout(‘layout_special’); 詳細的請參見 ZendFramework官方文檔 :http://framework.zend.com/manual/1.11/en/zend.controller.modular.html