Генерация маршрутов в JavaScript с помощью Twig и Symfony2 - PullRequest
36 голосов
/ 02 октября 2011

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

    });
});

Ответы [ 5 ]

72 голосов
/ 01 мая 2013

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

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

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

46 голосов
/ 02 октября 2011

Вы можете использовать FOSJsRoutingBundle .

2 голосов
/ 05 июля 2012
url:  "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"

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

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

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>
0 голосов
/ 03 мая 2019

Вы можете использовать атрибут данных в вашем 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
    })
})
0 голосов
/ 08 ноября 2016
 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})
...