37

很奇怪的问题,很抱歉问,我对 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下面的代码)?

问题是:我不能使用Symfony的助手pathurl因为他们需要指定我无法访问的region_id参数( ),因为它是一个 javascript 变量(并且 Twig 是在服务器端编译的)。this.value

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

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

    });
});
4

5 回答 5

78

我知道这是一个老问题,但以防万一你不想安装像 FOSJsRoutingBundle 这样的包,这里有一个小技巧:

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

'region_id' 仅用作占位符,然后在 JS 中将其替换为实际变量 this.value

于 2013-05-01T18:09:55.943 回答
45

您可以使用FOSJsRoutingBundle

于 2011-10-02T14:37:29.777 回答
4
url:  "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"

SampleBundle_route在 routing.yml 或注释中定义的有效路径在哪里。

为了测试,在树枝模板中写下这个:

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>
于 2012-07-05T11:11:12.290 回答
0
 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})
于 2016-11-08T20:50:15.407 回答
0

您可以在 HTML 中使用 data 属性:

<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
    })
})
于 2019-05-03T12:49:32.340 回答