2012-01-11 97 views
0

我有一個Zend Framework模塊化應用程序設置。我的一個模塊稱爲「前端」,它是默認模塊(resources.frontController.defaultModule = "frontend"位於我的配置文件中)。Zend Framework在模塊化應用程序中找不到表單

我有一個表格,Frontend_Form_PropertySearch位於/application/modules/frontend/forms/PropertySearch.php,並試圖在我的控制器使用方法如下:

public function searchAction() 
{ 
    $form = new Frontend_Form_PropertySearch(); 

    $form->submit->setLabel('Search'); 
    $this->view->form = $form; 
} 

但是,我越來越出現以下錯誤:

Fatal error: Class 'Frontend_Form_PropertySearch' not found in /Users/Martin/Dropbox/Repositories/realestatecms/application/modules/frontend/controllers/PropertiesController.php on line 17

我在哪裏出錯了?

+0

是你的appnamespace Frontend還是別的嗎?請參閱[應用程序自動加載](http://framework.zend.com/manual/en/zend.application.core-functionality.html#zend.application.core-functionality.bootstrap-bootstrap) – drew010 2012-01-11 21:21:25

+0

'appnamespace'仍設置爲'應用程序'在我的配置文件。 – 2012-01-11 21:27:09

+0

在這種情況下,BartekR的第一種方法應該可行。如果您使用默認的Zend Application自動加載器映射,您可以通過刪除'resourceTypes'數組來縮短它。您也可以將其添加到您的應用程序引導程序中,就像在ZF1中一樣,無論您當前的模塊如何,都將運行所有引導程序。 – drew010 2012-01-11 22:23:19

回答

2

One解決方案的可添加文件application/modules/frontend/Bootstrap.php,並把這個(類似的工作在我的項目之一):

<?php 
class Frontend_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
    protected function _initAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Frontend_', 
      'basePath' => APPLICATION_PATH .'/modules/frontend', 
      'resourceTypes' => array (
       'form' => array(
        'path' => 'forms', 
        'namespace' => 'Form', 
       ), 
       'model' => array(
        'path' => 'models', 
        'namespace' => 'Model', 
       ), 
      ) 
     )); 
     return $autoloader; 
    } 
} 

另一種解決方案,如akrabat描述:http://akrabat.com/zend-framework/bootstrapping-modules-in-zf-1-8/

// file application.ini 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.modules[] = "" 

File: /application/modules/frontend/Bootstrap.php 

<?php 
class Frontend_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

} 

第二個如文檔中所述使用默認資源自動加載器:http://framework.zend.com/manual/zh/zend.loader.autoloader-resource.html#zend.loader.autoloader-resource.module

0

確保您的ini文件包含ns這些行

resources.frontController.moduleDirectory = APPLICATION_PATH "/path/to/your/modules" 
resources.modules[] =