例如,我有一个这样的脚本:
Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'en'})
是正确的,但是当我删除“_locale”参数时,它会向我发送错误,例如必须设置“_locale”。我的路由名称 _moderation_profile_confirm 包含一个“_locale”前缀,但我如何发送路由管理器的“当前”语言环境?
例如,我有一个这样的脚本:
Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'en'})
是正确的,但是当我删除“_locale”参数时,它会向我发送错误,例如必须设置“_locale”。我的路由名称 _moderation_profile_confirm 包含一个“_locale”前缀,但我如何发送路由管理器的“当前”语言环境?
我想你在树枝模板中:
您可以使用此速记并获取当前语言环境:
Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'{{ app.session.locale }} '})
我在这里复制我在这里提出的回复 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;