1

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

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

在某些情况下,给定的值p包含一个斜杠,Symfony 失败并出现以下错误:

"路由 "r" 的参数 "p" 必须匹配 "[^/]++" (".../..." given) 以生成相应的 URL。")

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

无论如何,我设法用url_encodeTwig 过滤器解决了这个问题,如下所示:

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

现在在我的控制器中,我接受这个参数,如下所示:

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

显然 Symfony 不会自动对这个值进行 URL 解码$p,这也是我所期望的。

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

4

1 回答 1

2

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

/**
 * @Route("/a/b/{p}", name="r", requirements={"diagramResourceId"=".+"})
 **/
public function someAction($p) {
   // ...
}
于 2017-11-14T09:34:08.993 回答