Symfony 2与routing和_locale参数有关

时间:2015-11-05 15:09:12

标签: symfony routing

我对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(默认值)获取路由第一部分的值。

我需要的是获取正确的路由名称,并考虑默认的语言环境参数。

提前致谢。

1 个答案:

答案 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路线。