色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

zend framework多模塊多布局配置

許多人在使用過(guò)程中都會(huì)遇到這樣那樣的問(wèn)題,而且zend framework現(xiàn)在已經(jīng)到1.11版本了,網(wǎng)絡(luò)上的很多資料都還停留在舊版本上,因此我在這里以當(dāng)前的最新版本1.11為例,來(lái)簡(jiǎn)單介紹一下如何使用zend framework創(chuàng)建模塊化的應(yīng)用程序。由于今后框架的版本升級(jí),有些內(nèi)容可能會(huì)過(guò)時(shí),請(qǐng)及時(shí)參閱最新的使用手冊(cè)。

1、準(zhǔn)備工作

首先假設(shè)你已經(jīng)部署了web服務(wù)器php,并下載了zend framework的最新版本,創(chuàng)建了一個(gè)最原始的zend framework項(xiàng)目,并可以訪問(wèn)默認(rèn)的action了。你可以使用zend framework工具來(lái)創(chuàng)建項(xiàng)目,具體操作參見(jiàn)使用zend framework創(chuàng)建項(xiàng)目。當(dāng)然也可以自己手動(dòng)建立文件夾和文件,參見(jiàn)zend framework推薦的項(xiàng)目目錄結(jié)構(gòu)。

簡(jiǎn)單地看一下默認(rèn)的幾個(gè)重要目錄。
首先是public,它不但存放了程序的入口點(diǎn)index.php,還可以存放圖片,css,Javascript文件等。
其次是library,用于存放一些類(lèi)庫(kù),包括你自己定義的或第三方的類(lèi)庫(kù)。
然后是test,用于存放單元測(cè)試等測(cè)試文件的。
最后,也是和我們這里要講的關(guān)系最大的目錄――application。進(jìn)到application目錄下,會(huì)有以下目錄:
configs:存放配置文件,一般會(huì)有一個(gè)主配置文件application.ini;
controllers:操制器,如默認(rèn)的IndexController.php
models:存放業(yè)務(wù)邏輯,數(shù)據(jù)模型等文件;
views:視圖層的腳本,一般以.phtml為后綴名;
modules:模塊目錄,使用工具默認(rèn)選項(xiàng)自動(dòng)生成的是沒(méi)有這個(gè)目錄的,需要手動(dòng)添加。modules底下可以包含多個(gè)以模塊名命名的文件夾,如admin,默認(rèn)是default,一個(gè)文件夾代表一個(gè)模塊,其下的目錄結(jié)構(gòu)與application目錄類(lèi)似,又可以包含controllers,models,views等目錄。需要注意的是模塊下的controllers下面的文件的類(lèi)名請(qǐng)加上模塊名前綴,如application/modules/admin/controllers/IndexController.php的類(lèi)名為Admin_IndexController。

如果你需要在項(xiàng)目中方便的使用你自己寫(xiě)的一些類(lèi)庫(kù)(如名稱空間是Rockux),或是第三方的類(lèi)庫(kù),可以修改application.ini文件,添加以下行:
復(fù)制代碼 代碼如下:
autoloaderNamespaces.rockux = "Rockux_"
autoloaderNamespaces.thirdParty = "ThirdPartyLibrary_"

當(dāng)然你也可以根據(jù)需要多添加幾個(gè),不過(guò)請(qǐng)注意最后面的下劃線。

2、建立模塊
現(xiàn)在我們來(lái)創(chuàng)建一個(gè)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
并創(chuàng)建以下文件:
application/modules/admin/controllers/IndexController.php(類(lèi)名為Admin_IndexController)
application/modules/admin/views/scripts/index/index.phtml

除了新建模塊文件之外,還需要更改配置文件application.ini,刪除以下行,如果有的話:
復(fù)制代碼 代碼如下:
resources.frontController.controllerDirectory = APPLICATION_PATH"/controllers"

再加上如下行:
復(fù)制代碼 代碼如下:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.defaultModule = "default"
resources.modules[]

這樣,再訪問(wèn)http://localhost/admin,應(yīng)該就能看到admin模塊輸出的內(nèi)容了。
如果我們要充分發(fā)揮模塊的強(qiáng)大功能,我們還需要為模塊添加一個(gè)啟動(dòng)文件――Bootstrap.php。它可以使得你在事個(gè)模塊中方便的使用類(lèi)資源,models, filters, helpers等。在admin下新建Bootstrap.php,代碼如下:
復(fù)制代碼 代碼如下:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

并且在application/Bootstrap.php文件里加入以下方法:
復(fù)制代碼 代碼如下:
protected function _initAppAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'App',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}

復(fù)制代碼 代碼如下:
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中添加如下幾行:
復(fù)制代碼 代碼如下:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout = "layout"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts"

不論是第一種還是第二種,這時(shí)如果訪問(wèn)http://localhost/admin,你會(huì)發(fā)現(xiàn)系統(tǒng)并沒(méi)有使用期望的admin.phtml作為布局文件,而是使用了默認(rèn)的layout.phtml。這是因?yàn)閍dmin那行配置并不是系統(tǒng)默認(rèn)能處理的有效配置,所以我們要自己來(lái)處理它。

我們新建文件:library/Rockux/Controller/Action/Helper/LayoutLoader.php

針對(duì)第一種情況代碼如下:
復(fù)制代碼 代碼如下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{

public function 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);
}
}

}

針對(duì)第二種情況代碼如下:
復(fù)制代碼 代碼如下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{

public function 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);
}
}
}

接下來(lái)我們還需要將它添加到application/Bootstrap.php里去
復(fù)制代碼 代碼如下:
protected function _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout = Zend_Controller_Action_HelperBroker::addHelper(
new Rockux_Controller_Action_Helper_LayoutLoader());
}

再次訪問(wèn)http://localhost/admin,應(yīng)當(dāng)就可以看到使用指定的布局文件了。
如果要針對(duì)某個(gè)特定的controller使用特定的layout,可以在controller的init()方法里添加如下代碼:
復(fù)制代碼 代碼如下:
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('layout_special');

php技術(shù)zend framework多模塊多布局配置,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 台北县| 齐河县| 武强县| 巴东县| 鄄城县| 东明县| 通河县| 长丰县| 全椒县| 和林格尔县| 宝丰县| 仁化县| 巫溪县| 高青县| 荃湾区| 乃东县| 建平县| 文山县| 东乡| 正定县| 云阳县| 左贡县| 河源市| 定结县| 轮台县| 体育| 旌德县| 郓城县| 醴陵市| 诸暨市| 内丘县| 香河县| 余庆县| 舟曲县| 和田县| 威信县| 溧阳市| 汉阴县| 梅河口市| 色达县| 仙居县|