当URL包含句点(.)时,Symfony2中出现错误


Error in Symfony2 when URL contains dot(.)

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

例如:-路线:"my_Route"-第一个参数:"id"-第二个参数:"标题"

在Twig:

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

我得到以下错误:

在呈现模板期间引发异常(路由"my_route"的"参数"title"必须匹配"[^/.]++"(给出"另一个…测试")生成相应的URL。")在…中

我试过Symfony 2.0.3,没有问题。

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

提前感谢您的帮助。

向致以最良好的问候

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

文档示例:

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

编辑:

您应该避免使用点(".")作为参数。你真的应该使用你的头衔。但是,您可以在需求中尝试使用regex,以允许在title参数中包含句点。

  requirements:
      _format:  html
      title:     .+

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

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

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

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: [/] }