StoryTeller
StoryTeller

Reputation: 1748

Zend: Using forms in modules

I'm trying to use forms with modules, they should be stored inside the module. So at first my filestructure:

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

Within the IndexController, I'm trying to set the Form by

new Group_Form_Create()

and the class in Create.php is of course Group_Form_Create. I get the following error message:

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

The Bootstrap.php with the class Group_Bootstrap is just an empty class. Actually, I'm using the default Zend structure, but it woun't work anyway. Any ideas wheres the problems or what could be a possible solution?

Upvotes: 1

Views: 87

Answers (3)

Tim Fountain
Tim Fountain

Reputation: 33148

It sounds like your module bootstraps are not being run. These are triggered by the module resource, which is loaded if you have:

resources.modules[] = ""

in your application.ini. So add this if it is not present.

Upvotes: 1

Joel Lord
Joel Lord

Reputation: 2173

In my module bootstrap (APPLICATION_PATH/modules/group/Bootstrap.php), if use the following code:

    //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_'
                    )
            )
    ));

I then call the forms or models like this:

$frm = new Group_Form_Create();

I use the same snippet in all my modules and I only change the value of the $this->_moduleName; each time.

Hope this helps !

Upvotes: 3

Keval Domadia
Keval Domadia

Reputation: 4763

Ideally, it should work out of box.

Add this in your bootstrap:

protected function _initAutoload() {

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

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

}

Upvotes: 0

Related Questions