1

我的一条路线是这样定义的:

society_mybundle_searchpage:
    pattern:  /search/cp/{cp}
    defaults: { _controller: SocietyMyBundle:Search:searchByCP }

所以它需要一个参数:{cp}.

现在我想创建一个带有输入小部件的表单。所以我的代码是这样的:

  <form onsubmit="return search();" action="#">
    {{ form_rest(form) }}
  </form>

(没什么特别的,我让 symfony 为我做所有的工作)。请注意,此表单调用 JS 函数:search(). 所以这是我在树枝中的代码:

<script type="text/javascript">
<!--
function verif_formulaire(){
    /* some code to get the value of the cp */
    ...
    /* then: */
    ss="{{ path('society_mybundle_searchpage', {'cp': '+cp+'}) }}";
    return true;
}
-->
</script>

输出是:

function verif_formulaire(){
    ss="/symfony/web/app_dev.php/pizzas/search/cp/+tt+";
    return true;
}

这不是我需要的输出。我希望输出完全像这样:

function verif_formulaire(){
    ss="/symfony/web/app_dev.php/pizzas/search/cp/"+tt+"/";
    return true;
}

我该如何进行?

4

2 回答 2

2

我的解决方案是:url_decode在 twig 中实现一个自定义函数(非常简单)。

然后使用该format()功能。

结果如下:

window.location ="{{ path('my_path', {'cp': "%s" }) | url_decode | format('"+monCP+"') | raw }}";

说明:path('my_path', {'cp': "AAAA" })将生成一个类似“ /mypath/cp/AAAA/”的 URL,因此path('my_path', {'cp': "%s" })将生成一个类似“ /mypath/cp/%s/”的 URL

但是 ' %s' 将被转义。所以我通过' | url_decode'解码它:

path('my_path', {'cp': "%s" }) | url_decode

将生成正确的字符串' /mypath/cp/%s/'。

然后我使用该format()函数传递一个字符串。

示例:' "/mypath/cp/%s/" | format('OLIVIER')' 将给出 ' "/mypath/cp/OLIVIER/"'

所以,在这里,我传递了一个特定的字符串:('"+monCP+"'仔细观察引号和双引号)。

所以:' "/mypath/cp/%s/" | format('"+monCP+"')'会给' /mypath/cp/"+monCP+"/'

最后一个问题:这整个字符串再次被转义。这一次,一部经典的《| raw》就够了。

因此,总而言之,这是:

var xx ="{{ path('my_path', {'cp': "%s" }) | url_decode | format('"+monCP+"') | raw }}";

将产生完整的正常 JavaScript 代码:

var xx ="/my-symfony-url/cp/"+monCP+"/";

这可能看起来很复杂,但是哇。无需外部 JavaScript 文件。这就是我想要的。只是纯粹的快速 Symfony 2 php 生成的缓存。我大概可以把它做成 Twig 宏之类的。

于 2013-02-26T22:55:07.297 回答
0

如我所见,您需要在 JS 中生成路由。所以也许你需要一个FOSJsRoutingBundle

于 2013-02-23T14:24:18.847 回答