我有一个非常愚蠢的问题。 我正在尝试使用JS变量在twig中生成一个url。
当我手动编写它时,它会起作用:
var url = "{{ path('geolocation', {'latitude':'41.39109','longitude':'2.15485','accuracy':'1114'}) }}";
但是当我使用变量时它并没有:
var url = "{{ path('geolocation', {'latitude':latitude,'longitude':longitude,'accuracy':accuracy}) }}";
可能会发生什么? 当然,变量存在并且被正确定义。
它似乎没有正确获取参数:
在渲染模板期间抛出了异常 ("参数"准确度"路线"地理定位"必须匹配" [^ /] ++"("" 给出)生成相应的URL。")。
但是当我走的时候:
console.log(latitude + " " + longitude + " " + accuracy);
结果是
41.39109 2.15485 1114
答案 0 :(得分:3)
我建议您使用FOSJsRoutingBundle:
var url = Routing.generate('geolocation', { latitude: latitude, longitude: longitude, accuracy:accuracy })
注意:注意添加正确的js文件包含,并按照文档中的描述公开控制器的路由。
答案 1 :(得分:0)
我不熟悉TWIG,但在常规JS中,您的URL被分配了一个字符串,Javascript不能/不能替换普通字符串中的变量名。您将需要执行以下操作:
var url = "{{ path('geolocation', {'latitude':" + latitude + ",'longitude':" + longitude + ",'accuracy':" + accuracy + "}) }}";
ES6,如果你可以使用它有另一种方式,请回拨号字符串:
var url = `{{ path('geolocation', {'latitude':${latitude},'longitude':${longitude},'accuracy':${accuracy}"}) }}`;
通过将表达式括在$ {...}
中来标记要评估的表达式