Функция начальной загрузки _initRouter () ломает мои пользовательские маршруты - PullRequest
1 голос
/ 14 сентября 2011

Я следовал примеру 2 в Выполнении действия Zend Framework из командной строки , и я столкнулся с фатальной ошибкой

Fatal error: Zend_Controller_Router_Exception: Route logout is not defined

с пользовательским маршрутом и навигацией, которые я определяю в приложении.ini as

resources.router.routes.logout.route = logout
resources.router.routes.logout.defaults.controller = authentication    
resources.router.routes.logout.defaults.action = logout
resources.navigation.pages.logout.label = "Logout"
resources.navigation.pages.logout.controller = "authentication"
resources.navigation.pages.logout.action = "logout"
resources.navigation.pages.logout.route = "logout"
resources.navigation.pages.logout.resource = "logout"

Я сузил причину ошибки до этой функции начальной загрузки:

protected function _initRouter ()
{
    if (PHP_SAPI == 'cli') {
        $this->bootstrap ('frontcontroller');
        $front = $this->getResource('frontcontroller');
        require_once APPLICATION_PATH. '/router/Cli.php';
        $front->setRouter (new Application_Router_Cli ());
        $front->setRequest (new Zend_Controller_Request_Simple ());
    }
}

Что я здесь не так делаю?Ошибка присутствует, только когда CLI не используется (и если я удаляю _initRouter (), она работает как положено).

1 Ответ

5 голосов
/ 14 сентября 2011

Синтаксис resources.router в вашем application.ini предназначен для настройки ресурса «маршрутизатор».Существование метода с именем «_initRouter ()» в вашей начальной загрузке также настраивает ресурс, называемый «маршрутизатор».Я думаю, что это столкновение является причиной вашей проблемы, так как будет запущен только один из них (я не помню, какой имеет приоритет).

Я бы предложил переименовать ваш метод в что-то вроде _initCliRouter().

...