Symfony 3 路由允许 hyphes/dashes 占位符值

Symfony 3 Routing allowing hyphes/dashes in placeholder value

我在 Symfony 中遇到路由问题,我的路由设置需要匹配以下内容:

/my-test-route-holidays/

上面的"my-test-route"是占位符变量

symfony中的路由如下:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }

Symfony 找不到路由,像下面这样的路由在变量中没有 dashes/hyphens 的情况下仍然有效:

/test-holidays/

所以我的问题是,如何允许在路由占位符中使用连字符?

谢谢

我自己设法解决了这个问题,只是快速浏览了文档导致我得到了错误的答案。

我在 Symfonys 网站上多次看到这个页面,同时试图研究答案:Symfony Docs Current Slash in Parameter

在他们的例子中:

share:
    path:     /share/{token}
    defaults: { _controller: AppBundle:Default:share }
    requirements:
        token: .+

你可以看到他们添加了 "requirements" 并且在 "token" 下面,我只是假设 "token" 与正则表达式有关,但实际上它与你的占位符有关在你的 "path" 中,它们应该匹配。

下面是我的:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      token: .+

但我实际需要的是将"requirements"下的"token"替换为"var"。

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: .+

你知道吗,它有效!

我希望其他人觉得这很有用。

小心 .+,因为它会匹配 "any" 字符,包括 / 用于分隔路由的斜线字符。
例如:/@nY-th1nG/can/../~/go$foo-holidays

由于 requirements 参数接受正则表达式,为了匹配连字符,我建议改用 [-\w]+。匹配 -a-zA-Z0-9_ 1 次或多次。

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: [-\w]+

示例https://3v4l.org/c712H

允许

/01234578247-AbC-19082-Zx-holidays 

排除像 /$-holidays/test/12-holidays

这样的路径

如果您只需要数字日期,可以使用 [-\d]+ 或对可接受的日期格式有更严格的要求 \d{1,4}(-\d{1,2})?。 0-9999 后接可选破折号和 0-99

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: [-\d]+ #or \d{1,4}(-\d{1,2})?

这将允许

/190-holidays
/190-02-holidays

排除像 /2019-a-holidays/a-2019-holidays

这样的路径

如果您需要特定格式,请告诉我,我会将使用的要求模式更新为更合适的格式。