Php Symfony 3路由允许占位符值中使用连字符/破折号

Php Symfony 3路由允许占位符值中使用连字符/破折号,php,symfony,symfony-routing,Php,Symfony,Symfony Routing,我在Symfony的路线有问题,我的路线设置需要符合以下要求: /my-test-route-holidays/ 上面的“我的测试路线”是占位符变量 在symfony的路线如下: overview: path: /{var}-holidays/ defaults: { _controller: AppBundle:Overview:index } Symfony找不到路由,下面这样的路由在变量中没有破折号/连字符的情况下工作: /test-holidays/ 所以我的问题是,如何允

我在Symfony的路线有问题,我的路线设置需要符合以下要求:

/my-test-route-holidays/
上面的“我的测试路线”是占位符变量

在symfony的路线如下:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
Symfony找不到路由,下面这样的路由在变量中没有破折号/连字符的情况下工作:

/test-holidays/
所以我的问题是,如何允许在管线占位符中使用连字符


谢谢

我自己设法解决了这个问题,只是快速浏览了一下文档,才得出了错误的答案

我曾在Symfonys网站上多次看到此页面,同时试图研究答案:

在他们的例子中:

share:
    path:     /share/{token}
    defaults: { _controller: AppBundle:Default:share }
    requirements:
        token: .+
您可以看到,他们添加了“需求”,在“令牌”下面,我只是假设“令牌”与regex有关,但实际上它与您的“路径”中的占位符有关,它们应该匹配

以下是我所拥有的:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      token: .+
但我实际需要的是用“var”替换“requirements”下的“token”

你知道吗,它是有效的


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

小心使用
+
,因为它将匹配用于分隔路由的“任意”字符,包括
/
斜杠字符
例如:
/@nY-th1nG/can/./~/go$foo假日

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

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

/01234578247-AbC-19082-Zx-holidays 
不包括像
/$-假日
/test/12假日


如果只需要数字日期,可以使用
[-\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

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

/190-holidays
/190-02-holidays