很奇怪的问题,抱歉,我对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的path
和url
助手,因为他们需要指定region_id
参数({{1}我无法访问因为它是一个javascript变量(而Twig是在服务器端编译的)。
this.value
答案 0 :(得分:70)
我知道这是一个老问题,但是如果你不想安装像FOSJsRoutingBundle这样的软件包,这里有点破解:
var url = '{{ path("yourroute", {'region_id': 'region_id'}) }}';
url = url.replace("region_id", this.value);
'region_id'仅用作占位符,然后在JS中用实际变量this.value
替换它答案 1 :(得分:46)
您可以使用FOSJsRoutingBundle。
答案 2 :(得分:2)
url: "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"
其中SampleBundle_route
是routing.yml或annotatins中定义的有效路径。
要进行测试,请在树枝模板中写下:
<script>
var url= "{{ path('SampleBundle_route') }}";
alert(url);
</script>
答案 3 :(得分:0)
* @Route("/{id}/edit", name="event_edit", options={"expose"=true})
答案 4 :(得分: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
})
})