我有以下路线
$r->get('/select_folder/:mail')->to('mail#change_folder');
几乎每次都可以正常工作,但是当路由包含%2f个字符序列时,等效于/,就好像%2f是路径分隔符而不是转义序列一样。
这是示例输入:
http://127.0.0.1:5000/select_folder/%5bGmail%5d%2fDestacados
这是错误的一部分:
这些路由都无法为您对/ select_folder / [Gmail] / Destacados的GET请求生成响应,也许您需要添加一个新路由?
我想知道一些不使用GET或POST参数就可以将这样的参数作为url部分的方法。
答案 0 :(得分:3)
您可以使用wildcard placeholders允许/
成为匹配参数的一部分。
$r->get('/select_folder/*mail')->to('mail#change_folder');
将%2F解释为/
的原因是因为在将URL应用于路由之前已对其进行解码。
答案 1 :(得分:1)
最后,我发现了如何使用正则表达式解决问题。
$r->get('/select_folder/:folder'=>[folder=>qr/.*/])->to('mail#change_folder');
我让:folder匹配任何字符,现在可以正常工作了。