Ответ 1
Вы можете использовать FOSJsRoutingBundle.
Довольно странная проблема, извините за вопрос, я довольно новичок в Symfony/Twig. Для моего маршрута требуется обязательный параграф region_id
:
ajax_provinces_by_region:
pattern: /ajax/region/{region_id}/provinces
defaults: {_controller: SWAItaliaInCifreBundle:Ajax:provincesByRegion }
requirements: {region_in: \d+}
вопрос: как я могу создать этот маршрут на основе элемента select
в javascript (код ниже)?
Проблема : я не могу использовать помощники path
и url
из Symfony, поскольку они требуют указать параметр region_id
(this.value
), к которому я не могу получить доступ, это переменная javascript (и Twig скомпилирована на стороне сервера).
$(document).ready(function() {
$('select#regions').change(function(){
// Make an ajax call to get all region provinces
$.ajax({
url: // Generate the route using Twig helper
});
});
});
Вы можете использовать FOSJsRoutingBundle.
Я знаю, это старый вопрос, но на всякий случай вы не хотите устанавливать пакет, такой как FOSJsRoutingBundle, вот немного взломать:
var url = '{{ path("yourroute", {'region_id': 'region_id'}) }}';
url = url.replace("region_id", this.value);
'region_id' используется только как заполнитель, тогда вы заменяете его в JS своей фактической переменной this.value
url: "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"
Где SampleBundle_route
- допустимый путь, определенный в routing.yml или annotatins.
Для тестирования напишите это в шаблоне ветки:
<script>
var url= "{{ path('SampleBundle_route') }}";
alert(url);
</script>
* @Route("/{id}/edit", name="event_edit", options={"expose"=true})
Вы можете использовать атрибут данных в вашем HTML:
<select id="regions">
{% for region in regions %}
<option data-path="{{ path('ajax_provinces_by_region', {'region_id': region.id}) }}">...</option>
{% endfor %}
</select>
тогда в вашем javascript:
$('select#regions').on('change', function() {
let path = $(this).find(':selected').data('path')
$.ajax({
'url': path
})
})