Symfony,fos_js_routing和“ _locale”问题

Rog*_*sch 2 php routing symfony

这是我的app / routing.yml

前端捆绑:

resource: "@FrontendBundle/Resources/config/routing.yml"
prefix:   /{_locale}/
requirements:
    _locale: en|es
Run Code Online (Sandbox Code Playgroud)

后端捆绑:

resource: "@BackendBundle/Resources/config/routing.yml"
prefix:   /{_locale}/app
requirements:
    _locale: en|es
Run Code Online (Sandbox Code Playgroud)

fos_js_routing:资源:“ @ FOSJsRoutingBundle / Resources / config / routing / routing.xml”

这是我的BackendBundle \ Resources \ Config \ routing.yml

getModelsFromMake:

pattern:  /getModelsFromMake/{idMake}

defaults: { _controller: BackendBundle:Backend:getModelFromMake }
options:
    expose: true
Run Code Online (Sandbox Code Playgroud)

我的问题是当我像这样进行ajax调用时:

$ .ajax({type:“ POST”,

    url: Routing.generate('getModelsFromMake'),
    data: {
        idMake: $('#make').val(),
    },
    dataType: "json",
    success: function(data) { console.log("All OK"); },
    error: function()       { console.log("ERROR"); }
});
Run Code Online (Sandbox Code Playgroud)

镀铬检查员告诉我:

Uncaught Error: The route "getModelsFromMake" requires the parameter "_locale".
Run Code Online (Sandbox Code Playgroud)

有什么办法解决吗?

编辑1:

在我的布局中,我有这个:

<script type="text/javascript" src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
Run Code Online (Sandbox Code Playgroud)

编辑2:

如果我运行命令“ php app / console fos:js-routing:debug”,则会得到以下信息:

Name              Method Pattern
getModelsFromMake ANY    /{_locale}/app/getModelsFromMake
Run Code Online (Sandbox Code Playgroud)

Nic*_*nel 5

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

<!-- 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>
Run Code Online (Sandbox Code Playgroud)

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

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

为了阐明代码,有可能在js文件中隔离先前的脚本。为此,必须按照@DonCallisto的定义定义全局变量。

<!-- for exemple in the <head> of the page -->
<script>
    var REQUEST_LOCALE = '{{ app.request.locale }}';
</script>
Run Code Online (Sandbox Code Playgroud)

因此,在脚本中,您可以使用REQUEST_LOCALE

// this line
paramsExt._locale = '{{ app.request.locale }}';
// has to be replaced by
paramsExt._locale = REQUEST_LOCALE;
Run Code Online (Sandbox Code Playgroud)