激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - zend framework多模塊多布局配置

zend framework多模塊多布局配置

2019-11-18 14:09PHP教程網 PHP教程

zend framework對多模塊的支持是很好的,但是可能是由于功能太過強大的緣故,部署起來并不是很容易。

許多人在使用過程中都會遇到這樣那樣的問題,而且zend framework現在已經到1.11版本了,網絡上的很多資料都還停留在舊版本上,因此我在這里以當前的最新版本1.11為例,來簡單介紹一下如何使用zend framework創建模塊化的應用程序。由于今后框架的版本升級,有些內容可能會過時,請及時參閱最新的使用手冊

1、準備工作

首先假設你已經部署了web服務器和php,并下載了zend framework的最新版本,創建了一個最原始的zend framework項目,并可以訪問默認的action了。你可以使用zend framework工具來創建項目,具體操作參見使用zend framework創建項目。當然也可以自己手動建立文件夾和文件,參見zend framework推薦的項目目錄結構

簡單地看一下默認的幾個重要目錄。
首先是public,它不但存放了程序的入口點index.php,還可以存放圖片,css,javascript文件等。
其次是library,用于存放一些類庫,包括你自己定義的或第三方的類庫。
然后是test,用于存放單元測試等測試文件的。
最后,也是和我們這里要講的關系最大的目錄——application。進到application目錄下,會有以下目錄:
configs:存放配置文件,一般會有一個主配置文件application.ini;
controllers:操制器,如默認的IndexController.php;
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_" 


當然你也可以根據需要多添加幾個,不過請注意最后面的下劃線。 

2、建立模塊 
現在我們來創建一個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[] 


這樣,再訪問http://localhost/admin,應該就能看到admin模塊輸出的內容了。 
如果我們要充分發揮模塊的強大功能,我們還需要為模塊添加一個啟動文件——Bootstrap.php。它可以使得你在事個模塊中方便的使用類資源,models, filters, helpers等。在admin下新建Bootstrap.php,代碼如下: 

復制代碼代碼如下:


class Admin_Bootstrap extends Zend_Application_Module_Bootstrap 


并且在application/Bootstrap.php文件里加入以下方法: 

復制代碼代碼如下:


protected function _initAppAutoload() 

$autoloader = new Zend_Application_Module_Autoloader(array( 
'namespace' => 'App', 
'basePath' => dirname(__FILE__), 
)); 
return $autoloader; 

 

復制代碼代碼如下:


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 


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); 




針對第二種情況代碼如下: 

復制代碼代碼如下:


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); 



接下來我們還需要將它添加到application/Bootstrap.php里去 

復制代碼代碼如下:


protected function _initLayoutHelper() 

$this->bootstrap('frontController'); 
$layout = Zend_Controller_Action_HelperBroker::addHelper( 
new Rockux_Controller_Action_Helper_LayoutLoader()); 


再次訪問http://localhost/admin,應當就可以看到使用指定的布局文件了。 
如果要針對某個特定的controller使用特定的layout,可以在controller的init()方法里添加如下代碼: 

復制代碼代碼如下:


$layout = Zend_Layout::getMvcInstance(); 
$layout->setLayout('layout_special'); 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美人与牲禽动交精品一区 | 97超级碰碰人国产在线观看 | 欧美成人视 | 久久国产精品影视 | 亚洲第一成网站 | 91精品国产一区二区三区四区在线 | 国产免费一区二区三区视频 | fc2国产成人免费视频 | 精品国产一区二区亚洲人成毛片 | 国产精品999在线观看 | 天天夜夜操操 | 久久综合久久精品 | 欧美成人视 | 黄色影院av| 亚洲精品欧美一区二区三区 | www亚洲成人| 九九热国产视频 | 毛片成人网 | 久久精品视频16 | 成人性视频欧美一区二区三区 | 国产精品爱久久久久久久 | 日日摸夜夜添夜夜添牛牛 | 最新一区二区三区 | 操嫩草| 曰韩在线视频 | 亚洲va久久久噜噜噜久久男同 | 黄色片在线免费播放 | 亚洲网站免费观看 | 免费色片 | 色婷婷久久一区二区 | 国产精品免费看 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 | 黄网站免费入口 | 成人一级毛片 | 天天艹综合 | 成人精品视频网站 | 91精品国产综合久久久动漫日韩 | 性爱在线免费视频 | 午夜精品毛片 | 久久6国产| 日韩av在线播放一区 |