#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_… так что удалите это