1

我有一个测试模块。在测试模块中,我在表单文件夹中有一个表单。

myproject/application/modules/test/forms/TestForm.php

class Test_Form_TestForm extends Zend_Form {
    //form elements
}

myproject/application/modules/test/controllers/TestController.php

class Test_TestController extends Zend_Controller_Action {

    public function indexAction() {
        $this->view->form = new Test_Form_TestForm();  // this is generating error
    }
} // end class

控制器中的表单初始化产生以下错误:

Fatal error: Class 'Test_Form_TestForm' not found in C:\wamp\www\student\application\modules\notification\controllers\NotificationController.php on line 16

如何使此表单在控制器中可访问。相同类型的案例正在使用默认控制器。我知道我必须在引导程序中使用 Form_ 指示器注册我的模块,但不知道确切的语法。

4

5 回答 5

4

您还可以在一个 Bootstrap 文件中的单独函数中初始化多个模块,例如:

protected function _initAutoloaders() {

        $test_loader = new Zend_Application_Module_Autoloader( array(   'namespace' => 'Test',
                                                                            'basePath'  => APPLICATION_PATH . '/modules/test'
        ));


      $mynew_loader = new Zend_Application_Module_Autoloader( array(    'namespace' => 'Mynew',
                                                                            'basePath'  => APPLICATION_PATH . '/modules/mynew'
        ));
}
于 2011-02-07T10:05:59.510 回答
4

为了适用Zend Autoloader于您的模块,您需要为所有模块提供引导程序,并且还需要初始化模块资源。

所以,在你的application/modules/test/Bootstrap.php

class Test_Bootstrap extends Zend_Application_Module_Bootstrap {}

更新:

在你的application/configs/application.ini

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"    
resources.modules[] = 

有关在模块中自动加载的更多信息这里

于 2011-02-03T21:18:02.513 回答
2

Vika 对如何设置模块自动加载器的回答是正确的。

您的错误表明在 NotificationController 控制器下的通知模块中找不到表单类。

所以你需要有通知模块的引导类

在你的application/modules/notification/Bootstrap.php:

class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {}
于 2011-02-06T20:34:39.113 回答
1

我不知道这是否是最好的方法,但它确实有效。

在您的引导程序中

...
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => '', 'basePath' => APPLICATION_PATH));
$autoloader->addResourceType('Test_Form', '/test/forms', 'Test_Form');
...
于 2011-02-06T09:06:12.877 回答
1

维卡的回答似乎是正确的。

如果您仍然遇到问题,请尝试修改您的application.ini

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleDefault = "test"
resources.modules[] = "test"
resources.modules[] = "other"

如果您在资源列表中指定准确的模块名称,Zend 将自动注册表单和其他资源自动加载器。在调试情况下,应该触发modules/test/Boostrap.php和里面的任何 _init 方法。玩得开心。

于 2011-02-08T15:49:23.163 回答