Bootstrap函数_initRouter()会破坏我的自定义路由

Jon*_*eig 1 php bootstrapping zend-framework command-line-interface

我在命令行运行Zend Framework操作时遵循示例2 ,我遇到了致命错误

Fatal error: Zend_Controller_Router_Exception: Route logout is not defined
Run Code Online (Sandbox Code Playgroud)

使用我在application.ini中定义的自定义路由和导航

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"
Run Code Online (Sandbox Code Playgroud)

我已将错误原因缩小到此引导函数:

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 ());
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?错误仅在不使用CLI时出现(如果我删除了_initRouter(),它将按预期工作).

Tim*_*ain 5

resources.routerapplication.ini中的语法用于设置资源"router".在引导程序中存在一个名为"_initRouter()"的方法,也会设置一个名为"router"的资源.我认为这种冲突是导致你的问题的原因,因为只会运行其中一个(我不记得哪个优先).

我建议将你的方法重命名为_initCliRouter().