Почему моя форма не работает с моими модулями?

#php #zend-framework

#php #zend-framework

Вопрос:

У меня есть auth модуль, и я хотел бы сохранить Login форму в forms папке в модуле. У меня есть класс с именем Auth_Form_Login , и код, который я использую для создания его экземпляра в auth Index контроллере, является:

 $loginForm = new Auth_Form_Login($_POST);
  

Однако Zend жалуется, что не может найти класс. Что я делаю не так?

Редактировать

Моя структура каталогов выглядит следующим образом:

 application
    configs
    layouts
    modules
        auth
            controllers
            models
            views
                forms      <--- This is what I want to autoload from
        default
            controllers
            models
            views

library
public
  

Кроме того, модули настроены правильно:

 resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.prefixDefaultModule = false
  

Комментарии:

1. У вас есть загрузчик вашего Admin модуля на месте?

Ответ №1:

Похоже, вам не хватает начальной загрузки модуля для Auth модуля:

 application
     modules
         auth
             Bootstrap.php
  

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

 class Auth_Bootstrap extends Zend_Application_Module_Bootstrap {}
  

Комментарии:

1. Ах, это имеет смысл. Но это все еще не работает. У моего приложения есть пространство имен «SomeName», которое я использую для плагинов контроллера (например, SomeName_Controller_Plugin_Test ). Нужно ли мне SomeName пространство имен где-либо в модуле аутентификации? Например, нужно ли мне SomeName_Auth_Form_Login или что-нибудь в этом роде?

2. Я думаю, что проблема в том, что я только что упомянул, потому что я получаю ошибки, подобные этой: Application error caught in ErrorController: exception 'ErrorException' with message 'include_once(SomeNameAuthFormLogin.php . Похоже, что либо базовый путь настроен неправильно, либо есть еще проблемы с пространством имен

3. Нет, вам это не нужно. Еще одна вещь, которую нужно проверить, это инициализировали ли вы модули в своем application.ini таким образом: resources.modules[] =

4. Просто введите это, но то же сообщение об ошибке. Будет ли ZF знать, что у меня есть файлы начальной загрузки в каталогах моих модулей?

5. Вы переименовали ее в SomeName_Auth_Form_Login ? Она должна быть названа Auth_Form_Login и вызываться из вашего index контроллера с этим именем.

Ответ №2:

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

Я не уверен, как вы создали свою структуру на основе модуля. Я использую cli tool, который все настраивает.

Итак, в моем файле application.ini у меня есть:

 resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ''
resources.frontController.params.prefixDefaultModule = "1"
  

И в моем Boostrap.php:

 $modelLoader = new Zend_Application_Module_Autoloader ( 
                      array ('namespace' => '', 'basePath' 
                                         => APPLICATION_PATH . 
                                             '/modules/default' ) );
  

Вы также можете настроить автозагрузчик вручную, зарегистрировав свои ресурсы:

 $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => 'path/to/my/directory',
    'namespace' => 'Auth',
    'resourceType' => array(
       'form' => array(
            'path' => 'forms/'
            'namespace' => 'Form'
        )
        //...your code
     )
   )
);
  

Комментарии:

1. Каким должен быть мой базовый путь? Я добавил свою структуру каталогов к своему вопросу.

2. у вас неправильная структура проекта, папка формы должна быть размещена в каталоге auth, а не в каталоге views auth

3. Хорошо, я переместил ее, но она по-прежнему выдает мне эту ошибку: Application error caught in ErrorController: exception 'ErrorException' with message 'include_once(SomeNameAuthFormLogin.php)...

4. Ваша форма — Auth_Form_Login, а не SomeName_… так что удалите это