我想支持多语言结构,我使用以下几行
$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);
}
答案 0 :(得分:1)
您的自定义文件似乎覆盖了Zend Application中定义的default
模块。
您应该chain the routes而不是。
答案 1 :(得分:0)
您正在使用的设置意味着模块将“默认”为默认值,如果您没有,则会抛出路径未找到错误 - 这应该引发到适当的错误控制器
答案 2 :(得分:0)
我不确定我是否正确理解了这一点,但看起来它应该正常工作。如果您尝试调用非现有模块,Zend Framework会自动“重定向”到默认模块。