Проблемы с запуском модульного проекта Zend Framework - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь настроить модульный проект Zend Framework с внешними и внутренними модулями, но я просто не могу заставить его работать.Когда я захожу в каталог public в веб-браузере, я получаю следующее сообщение об ошибке:

Неустранимая ошибка: необработанное исключение «Zend_Controller_Dispatcher_Exception» с сообщением «Указан неверный контроллер (ошибка)» в / usr /share / ZendFrameworkCli / library / Zend / Controller / Dispatcher / Standard.php: 248 Трассировка стека: # 0 /usr/share/ZendFrameworkCli/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard_Re_ReaderSigner_ReaderSigner_ReaderSigner->), Object (Zend_Controller_Response_Http)) # 1 /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front-> рассылка () # 2 / usr / share / ZeliFFApplication.php (366): Zend_Application_Bootstrap_Bootstrap-> run () # 3 /Users/Martin/Dropbox/Repositories/realestatecms/public/index.php(25): Zend_Application-> run () # 4 {main} Следующее исключение 'Zend_Controller_'with message' Указан неверный контроллер (ошибка) # 0 / usr / share / ZendFrameworkCli / library / Zend / Controller / Front.php (954): Zend_Controller_Dispatcher_Standard-> dispatch (Объект (Zend_Controller_Request_Http), Объект (Zend_Controller_Response_Http)) в /usr/share/ZendFrameworkCli/library/Zend * 100 * 336

Я создал два модуля, используя инструмент командной строки Zend Framework, и эти две директории
module имеют Bootstrap.php с двумя классами с именами Frontend_Bootstrap и Backend_Bootstrap соответственно.

My application.iniФайл выглядит следующим образом:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
...

Что я сделал не так?Как заставить мой Frontend_IndexController() работать, когда я посещаю http://example.com/public в моем браузере?

РЕДАКТИРОВАТЬ: Если я обновлю свой файл конфигурации со строками согласно ответу ИванаТеперь я получаю это сообщение об ошибке:

Неустранимая ошибка: необработанное исключение 'Zend_Application_Resource_Exception' с сообщением 'Найден файл начальной загрузки для модуля "default", но класс начальной загрузки "Default_Bootstrap" не найден "в / usr / share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php:83 Трассировка стека: # 0 /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/BootstrapAbstract.php(683 )_Rodes_App_in_Date_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_R_1 /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/BootstrapAbstract.php(626): Zend_Application_Bootstrap_BootstrapAbstract -> _ executeResource ('modules')

* 1029 / 2nd / usf делятся на библиотеку ZendApplication / Bootstrap / BootstrapAbstract.php (586):

Zend_Application_Bootstrap_BootstrapAbstract -> _ bootstrap (NULL) # 3 / usr / share / ZendFrameworkCli / library / Zend / Application.php (355): Zend_Application_Bootstrap_BootstrapAbstract-> bootstrap (NULL) # 4 /Users/Martin/Dropbox/Repositories/realestatecms/public/index.php(25): Zend_Aplication-> bootstrap{main}, добавленный в /usr/share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php в строке 83

Откуда он получает Default_Bootstrap как имя класса?!

Ответы [ 3 ]

1 голос
/ 24 апреля 2012

У меня была такая же проблема, и я нашел решение на этой странице: http://updel.com/zend-framework-modular-application/

Вы должны прокомментировать следующую строку в /MyApp/application/configs/application.ini:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

как это:

;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

Это решило проблему, к сожалению, я недостаточно квалифицирован, чтобы объяснить / понять почему, извините. : -)

Надеюсь, это поможет.

0 голосов
/ 15 января 2012

Мартин, когда вы звоните http://example.com/public Zend Framework выдаст ошибку, которую вы видели, потому что маршрутизатор ищет контроллер с именем public .Обычный способ просмотра рабочего сайта Zend Frame - позвонить по номеру http://example.com или http://example.com/index.php.
Все запросы к приложению направляются через / application / public / index.php .

Похоже, что ваша исходная конфигурация для:

resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"

, вероятно, подходит для вашего приложения.

Это типичные строки в приложении .ini для включения модулей

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.params.prefixDefaultModule = ""//Frontend may be your default
resources.modules = ""

у вас могут быть некоторые различия в зависимости от структуры.Также обычно для каждого каталога модулей полезно включать собственные bootstrap.php , которые расширяют * Zend_Application_Module_Bootstrap *

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {
    //put your code here
}

Если это не помогает решить вашу проблему, укажите структуру каталогаи ваш application.ini (вы можете не указывать настройки БД и тому подобное), было бы полезно Index.php, если он был изменен по умолчанию.Также, пожалуйста, укажите вашу версию Zend Framework.

0 голосов
/ 11 января 2012

Вы изменили эту строку:

resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"

Я думаю, что это должно быть так:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

Тогда, если вам нужен модуль / контроллер по умолчанию, отличный от индекса / индекса, используйте следующие параметры конфигурации:

resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
resources.frontController.defaultModule = "frontend"

И вам не нужно обращаться http://yoursite.com/public. Это вызовет ошибку. Общедоступным каталогом должна быть ваша веб-папка DocumentRoot, и вы должны получить к ней доступ следующим образом: http://yoursite.com/

...