我对symfony 2有以下问题。问题是我在开头有几个带有_locale参数的路由定义,例如:
/**
* @Route("/{_locale}")
* @Route("/{_locale}/community")
* @Route("/{_locale}/events")
*/
现在,_locale参数的默认值为en-US,因此一旦网站区域设置为en-US,它就不会显示在网址上。
我有另一条路线会改变应用上的语言环境,
/**
* @Route("/change-locale/{locale}", name="change_locale")
*/
我需要获取referer路由名称,以便将请求重定向到引用路由名称,并将locale参数设置为新的语言环境。我这样做是使用路由器服务match()方法获取referer url的路由名称。
现在举个例子。
如果引用网址为/ en-US / community
然后使用匹配方法获得的转储路线为:
'_locale' = 'en-US'
'_route' = 'app_frontend_main_default_index_1'
哪个是正确的,但如果语言环境是默认语言环境(例如es-ES),则转储路由如下:
'_locale' = '/community'
'_route' = 'app_frontend_main_default_index'
哪个错误,因为url与另一个路由匹配,并且locale(默认值)获取路由第一部分的值。
我需要的是获取正确的路由名称,并考虑默认的语言环境参数。
提前致谢。
答案 0 :(得分:1)
您要添加额外的路线:
/**
* @Route("/", defaults={"_locale" = "en-US"})
* @Route("/community", defaults={"_locale" = "en-US"})
* @Route("/events", defaults={"_locale" = "en-US"})
*/
然后将requirements添加到现有:
/**
* @Route("/{_locale}", requirements={"_locale": "en-US|en|fr"})
* @Route("/{_locale}/community", requirements={"_locale": "en-US|en|fr"})
* @Route("/{_locale}/events", requirements={"_locale": "en-US|en|fr"})
*/
在这种情况下,您将能够同时处理/community
和/en-US/community
路线。