我在Symfony中遇到路由问题,我的路由设置需要与以下内容匹配:
/my-test-route-holidays/
以上" my-test-route"是占位符变量。
symfony中的路线如下:
overview:
path: /{var}-holidays/
defaults: { _controller: AppBundle:Overview:index }
Symfony无法找到路线,如下所示的路线在变量中没有短划线/连字符的情况下可以正常工作:
/test-holidays/
所以我的问题是,如何在路由占位符中允许连字符?
由于
答案 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]+
允许
/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
之类的路径
如果您需要一种特定的格式,请告诉我,我将使用的需求模式更新为更合适的一种。