Невозможно получить доступ к формам модуля в контроллере модуля - PullRequest
1 голос
/ 03 февраля 2011

У меня есть тестовый модуль. В тестовом модуле у меня есть форма в папке форм.

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_, но не знаю точного синтаксиса.

Ответы [ 5 ]

4 голосов
/ 07 февраля 2011

Вы также можете инициализировать несколько модулей в отдельной функции в одном файле начальной загрузки, например:

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'
        ));
}
4 голосов
/ 04 февраля 2011

Для того, чтобы 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[] = 

Подробнее об автозагрузке в модулях здесь

2 голосов
/ 06 февраля 2011

Правильный ответ Вики о том, как настроить автозагрузчик модулей.

В вашей ошибке указано, что класс формы не может быть найден в модуле уведомлений под контроллером NotificationController.

Поэтому вам необходим класс начальной загрузкидля модуля уведомлений

В вашем application/modules/notification/Bootstrap.php:

class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {}
1 голос
/ 08 февраля 2011

Ответ Вики кажется правильным.

Если у вас все еще есть проблемы, попробуйте изменить application.ini

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

Если вы указали точные имена модулей всписок ресурсов, Zend будет автоматически регистрировать форму и другие загрузчики ресурсов.В случае отладки modules / test / Boostrap.php должен быть запущен и любой метод _init внутри.Веселитесь.

1 голос
/ 06 февраля 2011

Не знаю, лучший ли это способ, но он работает.

В твоей начальной загрузке

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