Symfony 3路由允许在占位符值中使用连字符/短划线

时间:2017-08-09 09:23:58

标签: php symfony symfony-routing

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

/my-test-route-holidays/

以上" my-test-route"是占位符变量。

symfony中的路线如下:

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

Symfony无法找到路线,如下所示的路线在变量中没有短划线/连字符的情况下可以正常工作:

/test-holidays/

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

在他们的例子中:

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

你可以看到他们已经添加了"要求"在那个"令牌"下面,我只是假设"令牌"与正则表达式有关,但实际上它与你在"路径中的占位符有关。他们应该匹配。

以下是我所拥有的:

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

但我真正需要的是更换"令牌"根据"要求"用" var"。

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

你知道什么,它有效!

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

答案 1 :(得分:0)

请注意.+,因为它会匹配包括分隔线的“任何”字符(包括/)。
例如:/@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之类的路径

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