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
这样的路径
如果您需要特定格式,请告诉我,我会将使用的要求模式更新为更合适的格式。
我在 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
如果您需要特定格式,请告诉我,我会将使用的要求模式更新为更合适的格式。