0

例如,我有一个这样的脚本:

 Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'en'})

是正确的,但是当我删除“_locale”参数时,它会向我发送错误,例如必须设置“_locale”。我的路由名称 _moderation_profile_confirm 包含一个“_locale”前缀,但我如何发送路由管理器的“当前”语言环境?

4

2 回答 2

0

我想你在树枝模板中:

您可以使用此速记并获取当前语言环境:

Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'{{ app.session.locale }} '})
于 2012-07-11T23:18:27.093 回答
0

我在这里复制我在这里提出的回复 https://stackoverflow.com/a/35223108/279326

要将请求区域设置为您对 Routing.generate 的所有调用,您可以覆盖此方法并在每个调用中添加 {{app.request.locale}} 参数。以下脚本必须在 twig 模板中并在包含路由脚本之后执行。

<!-- Include JSRouting libs & exposed routes -->
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>

<script>
    $(function () {
        // change name of initial method
        Routing.generateImpl = Routing.generate;
        // override generate fonction by adding a default _locale from request locale
        Routing.generate = function (url, params) {
            var paramsExt = {};
            if (params) {
                paramsExt = params;
            }
            if (!paramsExt._locale){
                paramsExt._locale = '{{ app.request.locale }}';
            }
            return Routing.generateImpl(url, paramsExt);
        }
    })
</script>

现在您可以透明地使用 Routing.generate 而无需担心 _locale 参数!

// in any JS file
var url = Routing.generate('mypath');
var url2 = Routing.generate('another path', {param: 1});

为了澄清代码,可以将之前的脚本隔离在一个 js 文件中。为此,必须定义一个全局变量。

<!-- for exemple in the <head> of the page -->
<script>
    var REQUEST_LOCALE = '{{ app.request.locale }}';
</script>

所以在脚本中你可以使用 REQUEST_LOCALE

// this line
paramsExt._locale = '{{ app.request.locale }}';
// has to be replaced by
paramsExt._locale = REQUEST_LOCALE;
于 2016-02-05T11:35:23.700 回答