Symfony, fos_js_routing и проблемы с & quot; _locale & quot;

это мое приложение / routing.yml

FrontendBundle:

resource: "@FrontendBundle/Resources/config/routing.yml"prefix:   /{_locale}/
requirements:
_locale: en|es

BackendBundle:

resource: "@BackendBundle/Resources/config/routing.yml"prefix:   /{_locale}/app
requirements:
_locale: en|es

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

и мои проблемы, когда я делаю Ajax-вызов, как это:

$ .Ajax ({
тип: «POST»,

    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".

Любая идея, чтобы решить это?

РЕДАКТИРОВАТЬ 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>

РЕДАКТИРОВАТЬ 2:

если я запускаю команду «php app / console fos: js-routing: debug», я получаю это:

Name              Method Pattern
getModelsFromMake ANY    /{_locale}/app/getModelsFromMake

2

Решение

Попробуйте вставить этот фрагмент кода перед вашим ajax

<script>
var locale= {{ app.request.locale }} ;
</script>

и измените ваш скрипт следующим образом

$.ajax({ type: "POST",

url: Routing.generate('getModelsFromMake', array('_locale' => locale)),
data: {
idMake: $('#make').val(),
},
dataType: "json",
success: function(data) { console.log("All OK"); },
error: function()       { console.log("ERROR"); }
});
2

Другие решения

Чтобы установить языковой стандарт запроса для всех ваших вызовов 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>

Теперь вы можете использовать Routing.generate прозрачно, не беспокоясь о параметре _locale!

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

Чтобы прояснить код, можно было бы изолировать предыдущий скрипт в js-файле. Для этого глобальная переменная должна быть определена как сказано @DonCallisto.

<!-- 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;
4

По вопросам рекламы [email protected]