区域设置作为整个站点的前缀和全局

时间:2016-06-10 13:52:04

标签: symfony yaml

我尝试使用{_locale}作为前缀来定义我的网站的路由,因此会有以下路由:

  • mysite.com/about-us
  • mysite.com/es/about-us
  • mysite.com/en/about-us

我的第一个问题是将{_locale}定义为前缀使其成为必需的,并且路由mysite.com/about-us不会起作用。目前以这种方式定义:

#Acme/WebBundle/Resources/config/routing.yml
app_about_us:
    path: /{_locale}/about-us
    defaults: { _controller: AcmeWebBundle:Static:aboutUs, _locale: es}
    requirements:
    _locale:  es|en

#app/config/routing.yml
Acme_web:
    resource: "@AcmeWebBundle/Resources/config/routing.yml"
    prefix:   /

此外,我不希望我的路线显示{_locale},以便有人输入:

  • mysite.com/es/about-us更改为* mysite.com

最后,如果有任何方法可以为所有网站全局设置前缀,而不是将其放在每条路线上,那就太棒了。

1 个答案:

答案 0 :(得分:0)

好的,首先,您可以为整个应用程序设置default locale

# app/config/config.yml
framework:
    default_locale: en 

第二 - 这样做,你可以声明两条路线:

app_about_us:
    path: /{_locale}/about-us
    defaults: { _controller: AcmeWebBundle:Static:aboutUs}
    requirements:
    _locale:  es|en

app_about_us_locale:
    path: /about-us
    defaults: { _controller: AcmeWebBundle:Static:aboutUs, _locale: es}

我不确定是否有可能以不同的方式进行,而无需额外的捆绑,事件等......

其他方式

您可以设置会话区域设置 - here is example to make locale sticky。 这样您就可以创建正常路由,而不使用参数。那么如何设置新的会话区域设置?创建特殊路由以设置新的区域设置并重定向到原始页面。

app_set_locale:
    path: /{_locale}/
    defaults: { _controller: AcmeWebBundle:Locale:setLocale}
  • 内部控制器集locale重定向到上一页

阅读有关路由,区域设置,翻译的Symfony文档 - 也许您会发现一些有趣的内容:)