Zend:在模块中使用表单

时间:2012-07-23 12:07:35

标签: zend-framework module zend-form

我正在尝试使用带有模块的表单,它们应该存储在模块中。所以起初我的文件结构:

application/
   (...other directories)
   modules/
       group/
          controllers/
             IndexController.php
             (...controllers)
          forms/
             Create.php
          views/
             scripts/
                (...view scripts)
          Bootstrap.php

在IndexController中,我正在尝试通过

设置Form
new Group_Form_Create()

,Create.php中的类当然是Group_Form_Create。我收到以下错误消息:

Fatal error: Class 'Group_Form_Create' not found in (...)\application\modules\group\controllers\IndexController.php on line 380

具有Group_Bootstrap类的Bootstrap.php只是一个空类。 实际上,我使用的是默认的Zend结构,但无论如何它都无法正常工作。有什么想法可以解决问题或可能的解决方案吗?

3 个答案:

答案 0 :(得分:3)

在我的模块引导程序(APPLICATION_PATH / modules / group / Bootstrap.php)中,如果使用以下代码:

    //Loads the autoloader resources
    $this->_moduleName = 'group';
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'basePath' => APPLICATION_PATH ."/modules/".$this->_moduleName."/",
            'namespace' => '',
            'resourceTypes' => array(
                    //Tells the application where to find the forms
                    'form' => array(
                            'path' => 'forms/',
                            'namespace' => ucfirst($this->_moduleName).'_Form_'
                    ),
                    //Tells the application where to find the models
                    'model' => array(
                            'path' => 'models/',
                            'namespace' => ucfirst($this->_moduleName).'_Model_'
                    )
            )
    ));

然后我调用这样的表格或模型:

$frm = new Group_Form_Create();

我在所有模块中使用相同的代码段,我只更改$ this-> _moduleName的值;每一次。

希望这有帮助!

答案 1 :(得分:1)

听起来你的模块bootstraps没有被运行。这些由模块资源触发,如果您有:

,则会加载该模块资源
resources.modules[] = ""

application.ini中。如果它不存在,请添加它。

答案 2 :(得分:0)

理想情况下,它应该开箱即用。

在你的引导程序中添加它:

protected function _initAutoload() {

    $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Group_',
        'basePath' => dirname(__FILE__),
      ));

    Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
    return $autoloader;

}