web-dev-qa-db-ja.com

TwigおよびSymfony2を使用してjavascriptでルートを生成する

かなり奇妙な問題です。質問して申し訳ありませんが、私はSymfony/Twigが初めてです。私のルートには必須のregion_idパラメーターが必要です。

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

質問:JavaScriptのselect要素に基づいてこのルートを生成するにはどうすればよいですか(以下のコード)?

問題は:region_idパラメータ(this.value)を指定する必要があるため、Symfonyのpathおよびurlヘルパーを使用できません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
        });

    });
});
36
gremo

FOSJsRoutingBundle を使用できます。

46
igorw

私はそれが古い質問であることを知っていますが、FOSJsRoutingBundleのようなバンドルをインストールしたくない場合のために、ちょっとしたハックがあります:

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

'region_id'はプレースホルダーとして使用され、JSで実際の変数this.valueに置き換えます

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

どこ SampleBundle_routeはrouting.ymlまたはannotatinsで定義された有効なパスです。

テストのために、これをtwigテンプレートに書きます:

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

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
Nkoyan