Подтвердить что ты не робот

Создание маршрутов в javascript с Twig и Symfony2

Довольно странная проблема, извините за вопрос, я довольно новичок в 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
        });

    });
});
4b9b3361

Ответ 2

Я знаю, это старый вопрос, но на всякий случай вы не хотите устанавливать пакет, такой как FOSJsRoutingBundle, вот немного взломать:

var url = '{{ path("yourroute", {'region_id': 'region_id'}) }}'; 
url = url.replace("region_id", this.value);

'region_id' используется только как заполнитель, тогда вы заменяете его в JS своей фактической переменной this.value

Ответ 3

url:  "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"

Где SampleBundle_route - допустимый путь, определенный в routing.yml или annotatins.

Для тестирования напишите это в шаблоне ветки:

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>

Ответ 4

 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})

Ответ 5

Вы можете использовать атрибут данных в вашем 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
    })
})