2012-01-11 54 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[] = 
相关问题