2011-03-31 42 views
0

我很難弄清楚我們如何擁有一個模塊化目錄結構,並能夠加載要在模塊間共享的資源。即,具有公共資源的Zend Framework模塊

application 
--- /forms 
--- /models 
--- /modules 
------/module1/ 
---------/models 
------/module2/ 
---------/models 

現在,我想要做的是從模塊中/應用/表格負荷形式。我試過的所有東西都會導致這些類沒有被加載。

我試過了: 1)讓Zend試着自動判斷出來。 2)指定應用程序路徑的主引導程序中的所有路徑以及模塊。即,

protected function _initAutoload() 
{ 
    $front = $this->bootstrap("frontController")->frontController; 
    $modules = $front->getControllerDirectory(); 
    $default = $front->getDefaultModule(); 

    $moduleloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH 
    )); 

    foreach (array_keys($modules) as $module) { 
     $moduleloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => ucfirst(strtolower($module)), 
      'basePath' => $front->getModuleDirectory($module)) 
     ); 
    } 
} 

3)在我的桌子上多次砸我的頭。

..是的,我意識到我不需要模塊的循環,因爲我在每個模塊目錄中都有空白的引導程序。

歡迎任何建議。謝謝!

+0

抱歉,我的描述錯誤。我不包括形式,但形式元素。這個實現給了我一個想法,檢查Form_Element實際上是在Zend_Application_Module_Autoloader中映射的,事實證明它並不是。通過將這添加到資源類型,一切都開始工作。 – 2011-03-31 20:10:32

回答

0

試試這個:

protected function _initAutoload() 
{ 
    $autoloader = new Zend_Application_Autoloader_Resource(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH, 
     'resourceTypes' => array(
      'form' => array(
       'path' => 'forms/', 
       'namespace' => 'Form' 
      ) 
     ) 
    )); 

    return $autoloader; 
} 

你不需要的模塊的一部分,因爲你似乎已經知道了。根據需要添加其他資源類型。

由於這與您已經非常接近,因此可能存在另一個問題。上述應工作假設:在/應用程序目錄在您的應用程序

  • APPLICATION_PATH點
  • 形式類被命名爲Application_Form_Something
  • 這些類的文件名是Something.php(區分大小寫)

eg如果你有聯繫表格,你可以致電Application_Form_Contact這個班級,這將生活在application/forms/Contact.php

如果您仍然遇到問題,請提供一個未找到的表單類的示例,以及您從中調用它的方式和位置。

+0

查看我對我自己認識的答案的評論。我接受了這個,因爲它有一些很好的建議,並且可能對有類似問題的其他人有用。 – 2011-03-31 20:11:09