Невозможно получить доступ к модулям модуля в контроллере модуля

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

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, например:

     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' )); } 

    Чтобы 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[] = 

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

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

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

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

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

     class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {} 

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

    В вашем бутстрапе

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

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

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

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

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