【问题标题】:Link to index with default {_locale} parameter使用默认 {_locale} 参数链接到索引
【发布时间】:2012-09-19 21:07:47
【问题描述】:

我的项目中有一个语言选择器,可以使用语言环境参数 {_locale} 重定向到索引页面,但是当链接是在 routing.yml 中设置的默认语言环境时,链接看起来不同。这是我的代码:

我在代码中生成链接:

<a href="{{ path('ProjectBaseBundle_index', {'_locale': country.idlang}) }}">
    ...
</a>

这里是routing.yml:

ProjectBaseBundle_index:
    pattern:  /{_locale}
    defaults: { _controller: ProjectBaseBundle:Default:index, _locale: es }
    requirements:
        _locale: en|fr|de|es

这会正确生成所有语言的路线,购买默认的路线看起来不同:

http://project.dev/app_dev.php/en
http://project.dev/app_dev.php/fr
http://project.dev/app_dev.php/de
http://project.dev/app_dev.php/?_locale=es

es 是我们的默认语言代码。我正在使用 Symfony 2.1

有人知道如何为默认语言生成相同的路由吗?

【问题讨论】:

    标签: symfony-2.1


    【解决方案1】:

    这是因为UrlGenerator 中的要求条件和提供的参数 - 通过参数数组传递的未知参数会自动附加到 URL 的末尾作为 GET 参数。

    您是否尝试将默认语言环境放在config.yml 而不是将其放在路由的defaults 部分?

    Symfony-2.0

    framework:
        session: { default_locale: es }
    

    Symfony-2.1

    framework:
        default_locale: es
    

    【讨论】:

    • 是的,我已经定义好了。为什么其他语言工作正常?这是同样的情况。如果我在 routing.yml 中使用其他语言作为默认语言,则会发生这种其他语言
    • @Ztere0 您使用哪个版本的 Syfmony? 2.0 还是 2.1?
    • Symfony 2.1,抱歉我没有在帖子中提及
    • 更新了我的答案。您是否尝试设置为 2.1 定义的 default_locale?
    • 是的,是的。我将 default_locale 定义为 Symfony2.1 配置
    【解决方案2】:

    我才发现有道理,因为默认语言不存在参数{_locale},所以系统将该参数附加为GET参数。

    我找到了解决方法:

    ProjectBaseBundle_default:
        pattern: /{_locale}
        defaults: { _controller: ProjectBaseBundle:Default:index , _locale: %locale% }
    
    ProjectBaseBundle_index:
        pattern: /{_locale}
        defaults: { _controller: ProjectBaseBundle:Default:index }
        requirements:
            _locale: en|fr|de|es
    

    我在 Symfony 板中打开了一个问题:https://github.com/symfony/symfony/issues/5135

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 2017-06-08
      • 2014-10-04
      • 2014-07-01
      • 2021-09-05
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多