Zend Framework未知模块被解释为默认模块

时间:2011-02-20 13:45:37

标签: zend-framework zend-controller-router

我想支持多语言结构,我使用以下几行

$controller=Zend_Controller_Front::getInstance();
$router=$controller->getRouter();
$languageRouter=new Zend_Controller_Router_Route(":lang/:module/:controller/:action", array("lang"=>"en","module"=>"default","controller"=>"index","action"=>"index"),
                                                array("lang"=>"[a-zA-Z]{2}"));
$router->addRoute("default",$languageRouter);

它工作正常http://localhost/zend/public/en将lang param设置为en并调用默认模块 但问题是当我使用这样的网址时http://localhost/zend/public/en/anything 什么都不是模块,它仍然显示默认模块如何防止???


takehin 的回答后,我将此函数添加到bootstarp文件中,现在它可以正常工作

protected function _initRoutes()
{
    $routeLang=new Zend_Controller_Router_Route(':lang',array('lang'=>'en'),array('lang'=>'[a-z]{2}'));
    $front  = Zend_Controller_Front::getInstance() /*$this->getResource('frontcontroller')*/;
    $router = $front->getRouter();
    $routeDefault=new Zend_Controller_Router_Route_Module(array(),$front->getDispatcher(),$front->getRequest());
    $routeLangDefault=$routeLang->chain($routeDefault);
    $router->addRoute('default',$routeLangDefault);
    $router->addRoute('lang',$routeLang);
}

3 个答案:

答案 0 :(得分:1)

您的自定义文件似乎覆盖了Zend Application中定义的default模块。

您应该chain the routes而不是。

答案 1 :(得分:0)

您正在使用的设置意味着模块将“默认”为默认值,如果您没有,则会抛出路径未找到错误 - 这应该引发到适当的错误控制器

答案 2 :(得分:0)

我不确定我是否正确理解了这一点,但看起来它应该正常工作。如果您尝试调用非现有模块,Zend Framework会自动“重定向”到默认模块。