symfony 3 - 生成具有不同语言环境的当前 url

jur*_*iks 2 php routing locale symfony

我想要做的是创建一个输出链接列表的语言切换器模板,如下所示:

<div class="language-switcher">
    <ul>
        {% for locale in allowed_locales %}
            <li>
                <a href="{{ path($get current route name here $, { '_locale': locale }) }}">
                    {{ locale|upper }}
                </a>
            </li>
        {% endfor %}
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

我遇到的主要问题是 - Twig 的内置path函数接受路由 NAME,在 Symfony 3 中似乎无法检索。

另一个问题是 - 路由可能有额外的参数,需要与 _locale 参数合并。从我在互联网上找到的代码(当然都是针对 symfony v2 的),使这项工作产生非常难看的代码,这些代码绝对不属于模板。

我认为实现这一点的最佳方法是为此目的使用新的路由生成功能制作 Twig 扩展,但似乎这也可能有问题,因为 path() 函数位于另一个扩展中,我没有知道如何从我自己的扩展程序访问(我也不太确定这是个好主意)。

我怎么能做出这个东西?

编辑:我也不想在每个操作中将数据传递给模板,因为这根本不是 DRY。

aal*_*aap 7

@jurchick 指向该localized_path函数的链接不再有效,因此我创建了一个纯 Twig 实现:

{% set req = app.request %}
{% for locale in allowed_locales %}
    {% if locale != req.getLocale() %}
        <link rel="alternate" hreflang="{{ locale }}" href="{{
            absolute_url(
                path(
                    req.attributes.get('_route'),
                    req.attributes.get('_route_params')|merge({'_locale': locale})
                )
            ) }}" />
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

该块实际上为当前页面生成替代语言链接。随意在您的基本 HTML 块中使用它。