在Symfony路径树枝函数

时间:2017-11-07 13:26:43

标签: php twig symfony3.x

在我的应用程序中,我使用Symfony Twig扩展函数path来创建指向另一条路径的链接。该路由接受一个参数,所以我写了这样的路径函数:

<a href="{{ path('r', {p: p}) }}">...</a>

在某些情况下,给定值p包含斜杠,Symfony失败并显示错误:

  

&#34;参数&#34; p&#34;路线&#34; r&#34;必须匹配&#34; [^ /] ++&#34; (&#34; ... / ...&#34;给出)生成相应的URL。&#34;)

我希望Symfony能够处理这个并自动对这些值进行URL编码,但显然不是(或者我做错了)。

无论如何,我设法使用url_encode Twig过滤器修复了这个问题,如下所示:

<a href="{{ path('r', {p: p|url_encode}) }}">...</a>

现在在我的控制器中,我接受这样的参数:

/**
 * @Route("/a/b/{p}", name="r")
 **/
public function someAction($p) {
   // ...
}

显然,Symfony不会自动对此值$p进行URL解码,我也期望这样做。

我在这里做错了什么,或者是否真的有必要自己处理URL编码/解码?在Symfony文档中,我根本找不到任何有关此内容的详细信息。

1 个答案:

答案 0 :(得分:1)

显然,默认参数限制不允许使用正斜杠。在“放松”它们之后它起作用了:

/**
 * @Route("/a/b/{p}", name="r", requirements={"diagramResourceId"=".+"})
 **/
public function someAction($p) {
   // ...
}