5

我使用 Symfony 2.2.4,我拼命尝试生成 URL(使用 Twig)。事实上,当我的 URL 包含一个点时,我总是会遇到同样的错误。

例如: - 路线:“my_route” - 第一个参数:“id” - 第二个参数:“title”

在树枝中:

{{ path("my_route", {"id" : 1984, "title" : "another...test"}) }}

我收到以下错误:

在渲染模板期间引发了异常(“路由“my_route”的“参数“title”必须匹配“[^/.]++”(给出“another...test”)以生成相应的 URL。” ) 在 ...

我用 Symfony 2.0.3 试过了,没有问题。

你有解决这个问题的想法吗?

提前感谢您的帮助。

此致

4

2 回答 2

7

如果使用后缀,则应将其添加到路由的要求中并使用 {_format} 而不是 "html" :

文档中的示例:

article_show:
  path:     /id/{title}.{_format}
  defaults: { _controller: AcmeDemoBundle:Article:show, _format: html }
  requirements:
      _format:  html
      title:     .+

编辑 :

您应该避免在参数中使用点 (".")。你真的应该使用你的标题。但是您可以在要求中尝试使用正则表达式以允许在 title 参数中使用点。

  requirements:
      _format:  html
      title:     .+
于 2013-08-07T09:32:59.357 回答
0

老问题,但由于仍然有旧的 SF 代码库,这可能会为某人节省一些时间。

这是 SF 如何编译正则表达式以匹配路由的问题。这至少适用于版本 1.x 和 2.x,不确定新版本。

在您的下,routing.yml您需要指定title参数的预期格式requirements,如下所示:

my_route:
  url: /my_route/:id/:title
  param: { module: your_module, action: your_action }
  requirements: {title: .+}

或者,代替使用requirements,在您的路线上指定段分隔符也可以解决问题:

my_route:
  url: /my_route/:id/:title
  param: { module: your_module, action: your_action }
  options: { segment_separators: [/] }
于 2020-07-01T19:46:24.147 回答