Rog*_*sch 2 php routing symfony
这是我的app / routing.yml
前端捆绑:
Run Code Online (Sandbox Code Playgroud)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|esfos_js_routing:资源:“ @ FOSJsRoutingBundle / Resources / config / routing / routing.xml”
这是我的BackendBundle \ Resources \ Config \ routing.yml
getModelsFromMake:
Run Code Online (Sandbox Code Playgroud)pattern: /getModelsFromMake/{idMake} defaults: { _controller: BackendBundle:Backend:getModelFromMake } options: expose: true
我的问题是当我像这样进行ajax调用时:
$ .ajax({type:“ POST”,
Run Code Online (Sandbox Code Playgroud)url: Routing.generate('getModelsFromMake'), data: { idMake: $('#make').val(), }, dataType: "json", success: function(data) { console.log("All OK"); }, error: function() { console.log("ERROR"); } });
镀铬检查员告诉我:
Uncaught Error: The route "getModelsFromMake" requires the parameter "_locale".
Run Code Online (Sandbox Code Playgroud)
有什么办法解决吗?
编辑1:
在我的布局中,我有这个:
Run Code Online (Sandbox Code Playgroud)<script type="text/javascript" src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script> <script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
编辑2:
如果我运行命令“ php app / console fos:js-routing:debug”,则会得到以下信息:
Name Method Pattern
getModelsFromMake ANY /{_locale}/app/getModelsFromMake
Run Code Online (Sandbox Code Playgroud)
要将请求语言环境设置为您对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)