【问题标题】:FosJsRoutingBundle with '_locale'带有“_locale”的 FosJsRoutingBundle
【发布时间】:2012-07-11 12:56:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: symfony fosuserbundle


    【解决方案1】:

    我猜你在树枝模板中:

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

    Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'{{ app.session.locale }} '})
    

    【讨论】:

    • 我在一个纯 JavaScript 文件中,我只想知道这个语言环境选项是否是先决条件。
    【解决方案2】:

    我在这里复制我在这里提出的回复 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;
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多