路由中的区域设置,默认语言也没有参数

时间:2012-01-16 16:02:13

标签: annotations symfony

我想在Symfony2安装上通过url定义页面语言。我的路由通过控制器内部的注释工作。

的routing.yml

_index:
    resource: "@MyMainBundle/Controller/SiteController.php"
    type:     annotation

siteController.php

/**
 * @Route( "/{_locale}/{site}", name="_site_site", defaults={"_locale" = "en"}, requirements={"site" = "about|cities|download|blog", "_locale" = "en|de|fr|es"} )
 */

这很安静,但我想要的是,以下网址调用相同的操作。

http://example.com/download
http://example.com/en/download
http://example.com/de/download

如果没有languge-parameter,页面应该切换回默认语言,但这是我可以在我的行动中处理的事情。

我找到了这个答案,但根本无法使用它。 Symfony2 default locale in routing

4 个答案:

答案 0 :(得分:9)

只需添加另一个不包含区域设置的@Route注释。

/**
 * @Route("/{_locale}/{site}/")
 * @Route("/{site}/")
 */

答案 1 :(得分:1)

这也可以在notes.yaml中使用

frontend_controllers:
    resource: ../../src/Controller/Frontend
    type: annotation
    prefix:
        - /
        - /{_locale}
    defaults:
        _locale: 'en'

答案 2 :(得分:0)

如果您有api前缀,也可以使用下一个配置

controllers:
resource: ../../src/Controller/
type: annotation
prefix:
    - api
    - api/{_locale}
defaults:
        _locale: en

答案 3 :(得分:0)

另一个适用于我的 Symfony 5 模拟解决方案:

# config/routes/annotations.yaml
controllers:
    resource: '../../src/Controller/'
    type: annotation
    prefix:
        fr: ''
        en: '/en'

Symfony 文档:https://symfony.com/doc/current/routing.html#localized-routes-i18n