2011-04-20 1 views
0

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

$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 
+0

У вас есть свой 'admin' модуль начальной загрузки на месте? – Vika

ответ

1

Кажется например, у вас отсутствует модуль bootstrap для модуля Auth:

application 
    modules 
     auth 
      Bootstrap.php 

Что может состоять из этой единственной линии - просто сделать самозарядные волшебную работу:

class Auth_Bootstrap extends Zend_Application_Module_Bootstrap {} 
+0

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

+0

Я думаю, что я только что упомянул проблему, потому что я получаю такие ошибки: «Ошибка приложения, обнаруженная в ErrorController: исключение« ErrorException »с сообщением« include_once (SomeName \ Auth \ Form \ Login.php). либо базовый путь не настроен правильно или есть больше проблем с пространством имен –

+0

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

1

Вы делаете все правильно в вашей форме инициализации , Автозагрузчик просто не знает, где его найти, поэтому вам нужно правильно настроить автозагрузчик 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')); 

Вы также можете настроить autoloader manually by registering your resources:

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

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

+0

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

+0

Хорошо, я переместил его, но он все еще дает мне эту ошибку: «Ошибка приложения, обнаруженная в ErrorController : exception 'ErrorException' с сообщением 'include_once (SomeName \ Auth \ Form \ Login.php) ... ' –

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