У меня есть тестовый модуль. В тестовом модуле у меня есть форма в папке с формами.
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 метод внутри. Повеселись.