无法访问模块控制器中的模块表单

发布于 2024-10-16 04:26:09 字数 825 浏览 6 评论 0原文

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

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_ 指示器在引导程序中注册我的模块,但不知道确切的语法。

I have a test module. In test module I have a Form in forms folder.

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

Form initialization in controller is generating following error:

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

How to make this form accessable in controller. Same type of case is working with default controller. I know I have to register my module in bootstrap with Form_ indicator but dont know exact syntax.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

输什么也不输骨气 2024-10-23 04:26:09

您还可以在一个 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'
        ));
}

You can also initialize multiple modules in a separate function in one Bootstrap file like:

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'
        ));
}
爱你是孤单的心事 2024-10-23 04:26:09

为了让 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[] = 

更多信息关于模块中的自动加载此处

In order for Zend Autoloader to work for your modules, you need to have bootstraps for all of your modules, and also modules resource initialized.

So, in your application/modules/test/Bootstrap.php:

class Test_Bootstrap extends Zend_Application_Module_Bootstrap {}

Upd:

And in your application/configs/application.ini:

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

More info about autoloading in modules here

書生途 2024-10-23 04:26:09

Vika 关于如何设置模块自动加载器的答案是正确的。

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

因此,您需要

application/modules/notification/Bootstrap.php 中为通知模块提供引导类:

class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {}

Vika's answer is correct on how to setup modules autoloader.

Your error states that the form class cannot be found in notification module under NotificationController controller.

So you need to have bootstrap class for the notification module

In your application/modules/notification/Bootstrap.php:

class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {}
随遇而安 2024-10-23 04:26:09

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

在你的引导程序中

...
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => '', 'basePath' => APPLICATION_PATH));
$autoloader->addResourceType('Test_Form', '/test/forms', 'Test_Form');
...

I don't know if this is the best way, but it works.

In your bootstrap

...
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => '', 'basePath' => APPLICATION_PATH));
$autoloader->addResourceType('Test_Form', '/test/forms', 'Test_Form');
...
回首观望 2024-10-23 04:26:09

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

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

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

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

Vika's answer seems to be correct.

If you still having problems, try modify your application.ini

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

If you specify exact module names in resource list, Zend will auto-magically register the Form and other resource auto-loaders. In debugging case modules/test/Boostrap.php should be triggered and any _init method inside. Have fun.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文