URL包含点(。)时Symfony2出错

时间:2013-08-07 08:38:00

标签: php url symfony twig

我使用Symfony 2.2.4,我拼命地生成URL(使用Twig)。事实上,当我的网址加点时,我总是得到同样的错误。

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

在Twig:

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

我收到以下错误:

  

在渲染模板期间抛出了异常   (“参数”标题“路由”my_route“必须匹配”[^ /。] ++“   (“另一个......测试”给出)生成相应的URL。“)in ...

我尝试过Symfony 2.0.3,没有问题。

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

感谢您的帮助。

祝你好运

2 个答案:

答案 0 :(得分:6)

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

documentation的示例:

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

编辑:

您应该避免为参数使用圆点(“。”)。你应该真的使用你的头衔。但是您可以在regex中尝试使用title参数中的点。

  requirements:
      _format:  html
      title:     .+

答案 1 :(得分: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: [/] }