Symfony 如何在JavaScript函数中使用参数创建动态路由?

Symfony 如何在JavaScript函数中使用参数创建动态路由?,symfony,routing,twig,Symfony,Routing,Twig,我的一条路线定义如下: society_mybundle_searchpage: pattern: /search/cp/{cp} defaults: { _controller: SocietyMyBundle:Search:searchByCP } 所以它需要一个参数:{cp} 现在我想创建一个带有输入小部件的表单。所以我的代码是这样的: <form onsubmit="return search();" action="#"> {{ form_r

我的一条路线定义如下:

society_mybundle_searchpage:
    pattern:  /search/cp/{cp}
    defaults: { _controller: SocietyMyBundle:Search:searchByCP }
所以它需要一个参数:
{cp}

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

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

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;
}

我该如何继续?

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

我的解决方案是:在twig中实现一个自定义的
url\u解码功能(非常简单)

然后使用
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\u decode
”来解码它:

path('my_path', {'cp': "%s" }) | url_decode
将生成正确的字符串“
/mypath/cp/%s/

然后我使用
format()
函数传递字符串

例如:“
”/mypath/cp/%s/”| format('OLIVIER')
”将给出“
”/mypath/cp/OLIVIER/”

因此,在这里,我传递一个特定的字符串:
“+monCP+”
(仔细观察引号和双引号)

因此:“
”/mypath/cp/%s/”|格式(“+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文件。这就是我想要的。只需纯粹快速的symfony2php生成的缓存。我很可能会把它做成一个Twig宏之类的东西。

嗨,谢谢你的回答,但我有两个问题:(1)它是symfony 2.0,我非常惊讶我们必须安装外部东西才能在JS代码中生成URL(2)我在这里的bundle的使用中没有找到一个JavaScript代码示例,它可以输出除“硬编码”值以外的其他内容(在我提供的链接中搜索“youcando:”。也许这是唯一的解决方案,但我不知道如何使用它。也许在这里,我可以请您给我一个“动态”JavaScript小树枝模板的示例,它可以输出像
ss=“/symfony/web/app\u dev.php/pizzas/search/cp/
”+tt+“
/”这样的行
我希望函数
路径
的行为与
sprintf()
函数非常相似……实际上,如果我执行类似于
{%set txt='“+tt+”%%}
的操作,那么
{txt | raw}
,它将正确地输出
“+tt+”
。因此,我非常接近类似于
ss=“{{path('my_path',{'cp':txt}}”)但输出仍然转义,给出
ss=“/[blabla]/cp/%22+tt+%22”。我几乎在任何地方都尝试过
|raw
路径
函数总是对url进行编码。要实现您想要做的事情,您必须做一些工作,创建一个新的
url\u decode
函数或等效函数。这将有助于:
var xx ="/my-symfony-url/cp/"+monCP+"/";