我有一个测试模块。在测试模块中,我有一个Form in forms文件夹。
myproject的/应用/模块/测试/形式/ TestForm.php
class Test_Form_TestForm extends Zend_Form {
//form elements
}
myproject的/应用/模块/测试/控制器/ 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_指示器在bootstrap中注册我的模块,但不知道确切的语法。
答案 0 :(得分:4)
为了让Zend Autoloader
适用于您的模块,您需要为所有模块提供引导,并且还需要初始化模块资源。
所以,在你的application/modules/test/Bootstrap.php
:
class Test_Bootstrap extends Zend_Application_Module_Bootstrap {}
<强> UPD:强>
在您的application/configs/application.ini
:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
有关模块here
中自动加载的详细信息答案 1 :(得分: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'
));
}
答案 2 :(得分:2)
Vika对如何设置模块自动加载器的答案是正确的。
您的错误表明在NotificationController控制器下的通知模块中找不到表单类。
所以你需要为通知模块提供引导类
在application/modules/notification/Bootstrap.php:
class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {}
答案 3 :(得分:1)
我不知道这是不是最好的方式,但它确实有效。
在你的引导程序中
...
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => '', 'basePath' => APPLICATION_PATH));
$autoloader->addResourceType('Test_Form', '/test/forms', 'Test_Form');
...
答案 4 :(得分: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方法。玩得开心。