在 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 可以正常工作,并且只匹配第二条路线。
我只能控制路线,而不是正则表达式或匹配。谢谢。