2
我用symfony 2.事情下面的问题是,我有在一开始就_locale参数例如几个路由定义:Symfony的2问题与路由和_locale参数
/**
* @Route("/{_locale}")
* @Route("/{_locale}/community")
* @Route("/{_locale}/events")
*/
现在,_locale参数的默认值为en-US,因此一旦站点区域设置为en-US,它就不会显示在url上。
我有另一条路线,这将改变应用程序的语言环境,
/**
* @Route("/change-locale/{locale}", name="change_locale")
*/
我需要以请求重定向到引用站点路由名称设置为区域设置参数,以获得引荐路线名称新的区域设置。我使用路由器服务match()方法来获取引用者url的路由名称。
现在例如。
如果引荐网址是/ EN-US /社区
然后使用匹配方法获得倾倒路线:
'_locale' = 'en-US'
'_route' = 'app_frontend_main_default_index_1'
哪个是正确的,但如果语言环境是默认语言环境(如:ES-ES),则甩路线如下:
'_locale' = '/community'
'_route' = 'app_frontend_main_default_index'
哪项是错误的,因为URL匹配到另一条路线,以及区域设置(这是默认值)获得第一的价值部分路线。
我需要的是得到正确的路径名,同时考虑在默认的语言环境参数。
在此先感谢。
工作顺利,但您不认为路由器服务的匹配方法应考虑到默认参数吗? – asolenzal
至于我最好直接定义所有路线,不要有任何魔法。作为一个选项,您可以使用[“sticky”](http://symfony.com/doc/currentbook/session/locale_sticky_session.html)语言环境侦听器,它将语言环境(从语言首选项或geoip接收)添加到会话和一个主要控制器处理所有不带'{_locale}'参数的路由并重定向到所需的语言环境。在这种情况下,不需要为每个路由设置'/ {_ locale}'前缀,因为您可以在'routing.yml'文件中定义一次前缀。 – chapay
是的,没错,但是会话较少的应用程序,我使用Symfony作为休息后端。 – asolenzal