使用TWIG中JS变量的参数生成url

时间:2017-06-12 10:33:36

标签: javascript symfony twig

我有一个非常愚蠢的问题。 我正在尝试使用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

2 个答案:

答案 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}"}) }}`;

通过将表达式括在$ {...}

中来标记要评估的表达式