2012-09-11 34 views
2

正如我在另一篇文章中所說的,我試圖根據自己的需要調整一個開源Intranet。我試圖做的事情之一是讓Intranet在與默認不同的文件夾(從現在開始,$customViewPath$defaultViewPath)查找視圖模板。Zend Framework addScriptPath和Precurio Intranet

我完全沒有Zend Framework的經驗,我很難找出一些東西,但是這個我覺得我已經走到了死衚衕。

我在試圖通過在引導中使用$view->addScriptPath($customViewPath)來爲視圖模板添加我的自定義路徑。實際上,它的工作原理,但只有在$defaultViewPath中不存在視圖文件。我想要的僅僅是相反的:如果自定義文件不存在於$customViewPath中,請從$defaultViewPath加載默認視圖。

如果我打印getScriptPaths(),我得到array($defaultViewPath, $customViewPath)。也就是說,在腳本生命週期的某個地方,$defaultViewPath被添加到比我的自定義路徑更高優先級的視圖路徑列表中。我無法找到發生這種情況的地方,也不認爲它在每個模塊控制器中。

此外,我知道我必須將自己的代碼片段$view->addScriptPath($customViewPath)移到bootstrap之外的位置,因爲自定義路徑與模塊相關,但是我無法從自舉中訪問模塊名稱,因爲請求尚未啓動。我想我可以改變這一點,但我想盡可能保持原有的行爲。

我已閱讀關於addScriptPath(),setScriptPath(),getScriptPaths()的所有信息我可以理解,但仍然不知道如何將其應用於我的案例。任何想法都會受到歡迎。

我知道我應該提供有關應用程序的更多信息,但是我缺乏經驗讓我不知道還有什麼是必要的。請隨時索要任何可能使我的問題更清楚的事情。

該應用程序的代碼可以從其網站上下載。我只是不要在這裏發佈鏈接,以免它看起來像垃圾郵件。

編輯:

對不起堅持這個話題,但我越瞭解ZF更困惑我這個問題。

我已經追蹤了視圖路徑堆棧,並且在我的插件preDispatch()和動作preDispatch()函數之間的某處,將默認路徑(我試圖覆蓋的路徑)推入堆棧。

我能想到的唯一一件事就是我的一些其他插件正在執行。我試圖給我的插件一個非常高的執行順序號,但仍然沒有。

如果我說我至少在這個問題上花了兩週的時間(我不能在這個工作上花費更多的時間,我在家花很多時間),我並不誇張,我有閱讀所有我可以把我的手放在調度週期,但我不知道接下來要做什麼。

爲了防萬一我可能是對的,有沒有什麼辦法從動作列出插件正在執行什麼和它們的順序?

回答

2

基本上你已經顛倒了路徑堆棧的順序。

嘗試:

protected function _initView() 
    { 
     //Initialize view 
     $view = new Zend_View(); 

     //reset script path stack with custom view path 
     $view->setScriptPath($customViewPath); 
     //add default path back to path stack 
     $view->addScriptPath($defaultViewPath); 

     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
       'ViewRenderer'); 
     $viewRenderer->setView($view); 
     //Return it, so that it can be stored by the bootstrap 
     return $view; 
    } 

這應該做到幾乎你在找什麼。

+0

我實際上做了你所說的,但之後的某處(我無法找到位置),應用程序添加了自己的腳本路徑(在示例中稱爲$ default),所以我的默認路徑。 – akhasis

+0

您可能會檢查您的application.ini以查看任何可能覆蓋引導條目的視圖資源。同時檢查任何插件以查找改變路徑的代碼。如果你想 – RockyFord

+0

這個引導代碼在這裏[鏈接](https://bitbucket.org/mayorbrain/precurio-v2/src/fded0beca661/application/Bootstrap.php)(()你可以看到整個代碼)。 在$ this-> layout() - > content期間,視圖的路徑被改變(但是它僅僅改變了一些模塊而不改變其他!!)。 沒有更多的調用setScriptPaths和addScriptPaths。 我知道它可能看起來很基本,但我是個不錯的選擇,我不知道該從哪裏出發。感謝您的關注。 – akhasis