Zend框架的每個模塊佈局設置-跟進

史蒂芬勞埃德沃特金斯 ,週二二〇一〇年二月十六日下午8時48分

作為後續行動,我以前的職位上,每個模塊的佈局設置Zend框架 ,我已經更新了代碼,需要更少的配置,然後才(不是,它需要更多的幾行中,一個應用程序的配置!)。

我們再次利用一個動作助手Zend的控制器調用它的引導如下:

     / **
      *設置了佈局腳本對每個模塊的基礎
      * /
    保護功能_initLayoutHelper()
	 {
	     $這個 ->引導('frontController');
	     $佈局 = Zend_Controller_Action_HelperBroker::addHelper(
	        新Pro_Controller_Action_Helper_SetLayoutPath(APPLICATION_PATH));
	 }

幾乎完全一樣,只不過這次我們面前不斷APPLICATION_PATH傳遞到構造函數作為我們的基本路徑。

接下來,控制器動作助手本身現在看起來如下:

 / **
  *設置佈局路徑上的每個模塊的基礎上
  *
  * @作者勞埃德沃特金斯
  * @自16/02/2010
  * @包臨
  * @分裝 Controller_Action_Helper
  * /

 / **
  *設置佈局路徑上的每個模塊的基礎上
  *
  * @作者勞埃德沃特金斯
  * @自16/02/2010
  * @包臨
  * @分裝 Controller_Action_Helper
  * /
類 Pro_Controller_Action_Helper_SetLayoutPath
    延伸Zend_Controller_Action_Helper_Abstract
 {
	 / **
	  *基路徑
	  *
	  VaR的字符串* @
	  * /
	保護 $ _path;

	 / **
	  *構造
	  *
	  * @參數字符串$路徑
	  * /
	公共職能號 function __construct($路徑)
	 {
	     $這個 -> setBasePath($路徑);
	 }

	 / **
	  *設置相應的路徑
	  *
	  * @參數字符串$路徑
      * /
	公共職能 setBasePath($路徑)
	 {
		如果(!is_string($路徑)| |空($路徑)){
			拋出新的異常('例外字符串基路徑');
		 }
		 $這個 -> _path = $路徑;
	 }

	 / **
	  *獲取相應的路徑
	  *
	  * @返回字符串
	  * /
	保護功能_getBasePath()
	 {
		如果(is_null($這個 -> _path)){
			如果(!定義('APPLICATION_PATH')){
				拋出新的異常('基地路徑不能確定');
			 }
			 $這個 -> _path = APPLICATION_PATH;
		 }
		返回$這個 -> _path;
	 }

     / **
      *設置佈局的基礎上的模塊路徑
      * /
    公共職能 preDispatch()在
     {
    	 $模塊 = preg_replace函數(
    	     '/ [^排列] /我','',$這個 -> getRequest() - >“getModuleName()
    	 );

	    如果($引導 = $此-> getActionController()
	                        - >“getInvokeArg('引導')){

	         = $ $視圖引導 ->的getResource('視圖');
	         $ layoutPath = $此-> _getBasePath()。
	             “/模組 /模塊} {$ /佈局 /腳本 /”;

	         / *如果佈局目錄存在,那麼申請,否則,都將
	          *使用默認的後備
	          * /
	        如果(is_dir($ layoutPath)){
	             $這個 -> getActionController()
	                  - >“getHelper('佈局')
	                  - >“setLayoutPath($ layoutPath);
	             $視圖> headLink() - >“appendStylesheet(
	                 “/風格 / {$模塊} / style.css中”
	             );
	         }
    	 }
     }
 }

請注意,通過我們的基本路徑(參見 APPLICATION_PATH)在構造函數中,我們也有一個 getter和setter的基本路徑。 不同於以往版本的代碼,如果佈局路徑不存在,則該代碼將回落默認佈局的路徑。 如果沒有設置相應的路徑,將嘗試確定相應的路徑從不斷 APPLICATION_PATH,否則將引發異常。 我還厚臉皮拋出一個基於模塊的樣式表的好措施

該模塊為基礎的佈局確定從佈局腳本的路徑是否存在(顯然這種方法是可以改變的容易)。 這確實增加了一些開銷從安裝的application.ini(但是如果佈局路徑存在的PHP緩存結果將性能*),但你得到的回報更方便更容易的跌幅新的模塊。

就是這樣,沒有什麼不同,但你並不需要添加一個新的配置項,每次你想添加一個新的模塊:)

*要清除這個緩存(如需要)使用clearstatcache功能。

2回應“Zen​​d框架的每個模塊的佈局設置 - 跟進”

  1. Behrang 說:

    你好,請告訴我哪裡來創建類 Pro_Controller_Action_Helper_SetLayoutPath與該文件的名稱
    我是新手在Zend。
    謝謝

  2. 嗨Behrang,創建動作助手,找遍你喜歡的名字,我有我自己的'圖書館'命名空間'臨'。 你可以很容易地調用類的SetLayoutPath'並把它放在任何你喜歡,提供的代碼,你可以找到它所需的類擴展

給一個答复













全景主題 Themocracy

現在 5訪客在線
3位客人,2機器人,0位會員
最大遊客今日:24日上午12時 36分聯合技術
本月:26日2011年7月5日上午12點 35分聯合技術
今年:130 28-03-2011下午10時 40聯合技術
所有時間:130 28-03-2011下午10時 40聯合技術