1

我想为我的工作支持多语言结构我使用了以下几行

$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 参数设置为 en 并调用默认模块,但问题是当我使用这样的 url 时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);
}
4

3 回答 3

1

看起来您已经用default自定义模块覆盖了 Zend Application 中定义的模块。

您应该改为链接路线

于 2011-02-20T19:23:52.967 回答
0

您正在使用的设置意味着模块将“默认”为 default ,如果您不这样做,它会抛出一个找不到路由的错误 - 这应该抛出到适当的错误控制器

于 2011-02-20T13:51:41.003 回答
0

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

于 2011-02-20T13:53:18.330 回答