【发布时间】:2013-04-13 00:17:44
【问题描述】:
在 PHP 中,klein 路由将匹配尽可能多的路由。 我设置的 2 条路线相互冲突。它们是:
$route1: '/websites/[i:websiteId]/users/[i:id]?'
和
$route2: '/websites/[i:websiteId]/users/[a:filename].[json|csv:extension]?'
这是我要匹配的 URL,我认为应该匹配第一个而不是第二个,是:
/api/v1-test/websites/100/users/4
为这两个生成的正则表达式是:
$regex1: `^/api(?:/(v1|v1-test))/websites(?:/(?P<websiteId>[0-9]++))/users(?:/(?P<id>[0-9]++))?$`
$regex2: `^/api(?:/(v1|v1-test))/websites(?:/(?P<websiteId>[0-9]++))/users(?:/(?P<filename>[0-9A-Za-z]++))(?:\.(?P<extension>json|csv))?$`
如果没有“.csv”或“.json”,我的意思是它不匹配。问题是它匹配两条路线。对于第二个,生成的文件名是“4”,扩展名是空白的。
发送 /api/v1-test/websites/100/users/users.csv 可以正常工作,并且只匹配第二个路由。
我只能控制路由,而不是正则表达式或匹配。 谢谢。
【问题讨论】: