【问题标题】:Error in Symfony2 when URL contains dot(.)当 URL 包含点 (.) 时 Symfony2 中的错误
【发布时间】:2013-08-08 13:06:21
【问题描述】:

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

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

在树枝中:

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

我收到以下错误:

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

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

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

提前感谢您的帮助。

最好的问候

【问题讨论】:

  • 使用反斜杠而不是正斜杠来匹配一个点。对不对,要求是Match non-forward-slash and non-character,其实可以看到路由配置。
  • 更准确地说,当我在路线上添加后缀时会发生错误。例如:“模式:/show/{id}/{title}.html”
  • 需要查看路由配置(yml、xml、注解)、控制器动作方法(以及类注解,如果有的话),以及你正在使用的url。
  • 我遇到了类似的问题,这是一个问题,因为我的路由器没有将调用转发到不是 php 的文件...在我的情况下是 BrowserSync。

标签: php url symfony twig


【解决方案1】:

如果你使用后缀,你应该在路由的需求中添加它,并使用{_format}而不是“html”:

来自documentation 的示例:

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

编辑:

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

  requirements:
      _format:  html
      title:     .+

【讨论】:

【解决方案2】:

老问题,但由于仍然有旧的 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: [/] }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2012-08-06
    • 2012-06-11
    • 1970-01-01
    • 2017-06-06
    • 2016-09-10
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多