wake-up-neo.com

Routen in Javascript mit Twig und Symfony2 generieren

Ein recht seltsames Problem, es tut mir leid, dass ich gefragt wurde. Meine Route erfordert einen obligatorischen region_id-Parameter:

ajax_provinces_by_region:
  pattern: /ajax/region/{region_id}/provinces
  defaults: {_controller: SWAItaliaInCifreBundle:Ajax:provincesByRegion }
  requirements: {region_in: \d+}

Die Frage ist: Wie kann ich diese Route basierend auf einem select Element in Javascript generieren (Code unten)?

Das Problem ist: Ich kann keine path- und url-Helfer von Symfony verwenden, da sie den region_id-Parameter (this.value) angeben müssen, auf den ich nicht zugreifen kann, weil es eine Javascript-Variable ist (und Twig serverseitig kompiliert ist).

$(document).ready(function() {
    $('select#regions').change(function(){

        // Make an ajax call to get all region provinces
        $.ajax({
            url: // Generate the route using Twig helper
        });

    });
});
34
gremo

Sie können das FOSJsRoutingBundle verwenden.

44
igorw

Ich weiß, dass es eine alte Frage ist, aber nur für den Fall, dass Sie kein Paket wie FOSJsRoutingBundle installieren möchten, hier ein kleiner Hack:

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

'region_id' wird nur als Platzhalter verwendet, dann ersetzen Sie ihn in JS durch Ihre aktuelle Variable this.value

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

Dabei ist SampleBundle_route ein gültiger Pfad, der in routing.yml oder Annotatins definiert ist.

Schreiben Sie dies zum Testen in die Zweigvorlage:

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>
2
George
 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})
0
Imen AchOurii

Sie können das Datenattribut in Ihrem HTML verwenden:

<select id="regions">
    {% for region in regions %}
        <option data-path="{{ path('ajax_provinces_by_region', {'region_id': region.id}) }}">...</option>
    {% endfor %}
</select>

dann in ihrem javascript:

$('select#regions').on('change', function() {

    let path = $(this).find(':selected').data('path')

    $.ajax({
        'url': path
    })
})
0
Nkoyan