1

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

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

ответ

4

Вы также можете инициализировать несколько модулей в виде отдельной функции в одном файле 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' 
     )); 
} 
+0

Самый короткий путь в основном бутстрапе ... – Awan

4

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

Более подробной информации о автозагрузке в модулях here

+0

Я создал класс Test_Bootstrap в ** приложении/modules/test/Bootstrap.php ** Но такая же ошибка. Можете ли вы предоставить дополнительную информацию. – Awan

1

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

В вашем загрузчике

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

ответ Vika правильна, как установить модули заряжания.

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

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

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

class Notification_Bootstrap extends Zend_Application_Module_Bootstrap {} 
1

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

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

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

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

Смежные вопросы