Я пытаюсь создать модуль для интерфейса администратора, но у меня возникают проблемы с тем, чтобы он отвечал вообще - Я до сих пор сделал следующее: я изменил файл начальной загрузки моего основного приложения загрузить каталог модулей:
$modules = PROJECT_DIR . '/library/PHPLib/ZF/Modules';
define('MODULES_DIR', $modules);
$frontController->addModuleDirectory(MODULES_DIR);
Модуль содержится внутри моей внешней библиотеки PHP, которую я повторно использую для каждого проекта, на основе ZendFramework или нет. Это первый раз, когда я добавляю модуль, но ранее я использовал библиотеку для поддержки вспомогательных классов и плагинов без проблем. Структура модуля находится внутри модулей PHPLib / ZF / и выглядит следующим образом:
ModAdmin/
controller/
IndexController.php
model/
view/
includes/
layouts/
scripts/
index/
index.phtml
Класс IndexController.php определен как «ModAdmin_IndexController», как мне было сказано в некоторых ресурсах ZF, которыми я владею. Сценарий присутствует, а макет еще не создан. Я не уверен, собираюсь ли я использовать один или нет.
Итак, когда я пытаюсь запросить индекс модуля ModAdmin в браузере, я получаю 404. URL, который я использую:
http://hostname/ModAdmin/
Я что-то упустил? Согласно некоторым книгам, таким как «ZendFramework In Action» и «ProPHP», они говорят, что это все, что требуется. Когда я прочитал, что они говорят, что это было так просто, я почти не мог удержаться от смеха - ничто в ZendFramework никогда не "так" просто - мне нравится ZF, ALOT, но это не просто. Сложность в том, что она такая гибкая и мощная.
В любом случае - есть идеи?
EDIT
Думаю, мне следует добавить, что я начал использовать ZF задолго до того, как появились классы Zend_Application или Zend_Tool - это было до того, как ZF стал мудрым и начал эмулировать MVC в стиле RoR - и в любом случае - в моем проекте этого нет, потому что пока я не начал исследовать модули, я даже не знал об их существовании. При этом у меня нет времени на то, чтобы настроить кривую обучения, связанную с ними, и я вполне доволен созданием своей начальной загрузки вручную.
На самом деле - если честно - я создал «инструмент развертывания» под названием «padmin», который представляет собой php-скрипт CLI, который выполняет многое из того, что делает Zend_Tool, и я использую его в сочетании с «phing», который похож на «муравей» для php - во всяком случае - я справился с этим, как и большинство людей.
EDIT2
Я нашел этот ресурс, который, по-видимому, предназначен для добавления модулей без использования Zend_Tool, и, несмотря на выполнение всех требований, которые он предъявляет, я все равно получаю код 404 при запросе модуля описанным способом:
http://hostname/modulename/index или http://hostname/modulename/
EDIT3
Ну, ребята, я не могу выразить, как это расстраивает. Каждый ресурс в Интернете либо ссылается на создание модулей с помощью Zend_Tool / Application, либо то, что я заканчиваю, обсуждает модули только в очень специфическом аспекте. Мне нужно что-то, что поможет мне отладить, почему стадия диспетчеризации / маршрутизации FrontController не находит модуль. Я установил каталог модулей в моей начальной загрузке. Модуль имеет контроллер и скрипт вида. Вот и все - ему не нужно ничего больше, чем это. Что еще это может потребовать? Я попытался добавить каталог контроллера модуля по отдельности (вместо того, чтобы добавить его через 'addModuleDirectory') и до сих пор не играли в кости. Существует некоторая документация, о которой я упоминал ранее:
Правила соответствия указывают, что модуль будет сопоставляться только в том случае, если
ключ с тем же именем существует в переданном массиве каталога контроллера
на передний контроллер и диспетчер.
Ну, ребята, я так и сделал:
$defaultControllerDir = PROJECT_DIR . '/application/controller';
$modadminControllerDir = PROJECT_DIR . '/library/PHPLib/ZF/Modules/ModAdmin/controller';
$frontController->setControllerDirectory(array(
'default' => $defaultControllerDir,
'modadmin' => $modadminControllerDir
));
Пока что - без кубиков. Браузер откликается на 404. Было бы неплохо, если бы у фронт-контроллера была какая-то внутренняя емкость для аудита / журналирования, которую я мог бы включить и точно наблюдать за происходящим (и я полагаю, что я мог бы сделать это, если бы я захотел покопаться в источнике и поместил несколько печатных заявлений, но это становится смешным).
Это абсолютно ошеломляет.Это случилось со мной давным-давно, когда я впервые изучал ZF - и как это задокументировано - когда что-то идет не так - очень трудно понять почему.Что ж, я снова здесь с другой проблемой - я выполнил все мыслимые инструкции (которые я обнаружил до знакомства с zend_tool), и все же ничего не работает.
Единственное, что я не сделал, это настроил структуру каталоговкак это:
modules/
default/
controllers/
models/
views/
custom1/
controllers/
models/
views/
но это полностью разрушило бы цель модуля, верно?Если я не могу сохранить свой код модульного модуля в библиотеке (то есть не в каталоге приложения, а во внешней библиотеке), то какой, черт возьми, смысл создавать этот модуль !?Мне нужно иметь возможность поместить мой код модуля в мою библиотеку: '/ library / PHPLib / ZF / Modules / ModAdmin' - что дает!
РЕДАКТИРОВАТЬ - В ответ на выбранный ответ
Довольно интересно - после изменения настроек каталога Apache на AllowOverride All, тогда я получаю ответ вашего плагина на запрос mod-admin вместо 404(array (3) {["module"] => string (9) "mod-admin" ["controller"] => string (5) "index" ["action"] => string (5) "index"}) затем, если я отключаю плагин, я получаю эту ошибку:
Неустранимая ошибка: необработанное исключение 'Zend_Controller_Dispatcher_Exception' с сообщением 'Указан неверный контроллер (индекс)' в / home / nevertap / work / nevertap /library / Zend / Controller / Dispatcher / Standard.php: 248 Трассировка стека: # 0 /home/nevertap/work/nevertap/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard-> dispatch (Object (Zend_Controlt_p_Reader_P)Объект (Zend_Controller_Response_Http)) # 1 /home/nevertap/work/nevertap/application/configuration/bootstrap.php(100): Zend_Controller_Front-> dispatch () # 2 / home / nevertap / work / nevertap / application / configuration / bootstrap.php (110): Bootstrap-> configureFrontController () # 3 /home/nevertap/www/nevertap/index.php(19): Bootstrap-> runApp () # 4 {main}, добавляемый в / home / nevertap/work/nevertap/library/Zend/Controller/Dispatcher/Standard.php в строке 248
, что очень странно, потому что ... / Modules / mod-admin / controller / IndexController.php существует какделает ... / Modules / mod-admin / view / scripts / index / index.phtml - не говоря уже о том, что классу IndexController присваивается соответствующий префикс «ModAdmin_IndexController»
FINAL EDIT
OK IНаконец-то все получилось - похоже, загрузив каталог модуля, он искал каталог контроллера по умолчанию, который всегда имел паттерн «контроллеры», а мой был «контроллер», поэтому вместо загрузки модуля с помощью addModuleDir я использовал другой:
$modadminControllerDir = PROJECT_DIR . '/library/PHPLib/ZF/Modules/mod-admin/controller';
$frontController->addControllerDirectory($modadminControllerDir, 'mod-admin');