Php Symfony 3路由允许占位符值中使用连字符/破折号
我在Symfony的路线有问题,我的路线设置需要符合以下要求: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/ 所以我的问题是,如何允
/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