我想将url作为参数传递给控制器,如下所示:
$api->get('/getfile/{fileurl}', function(Request $request, $fileurl){
//do something
}
此处{fileurl}可以是有效的http网址。但是,上面的映射不起作用并产生404(可能是因为{fileurl}部分中的斜杠?)。如何解决它接受$ fileurl变量中的$ url?
答案 0 :(得分:2)
您需要检查与fileurl部分匹配斜杠匹配的正则表达式,因为默认情况下不会这样做。
只需在您的路线上拨打assert("fileurl", ".*")
这样的电话:
$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
// ...
})->assert("fileurl", ".*");
确保它是你的最后一个参数,因为它会吞下一切。
答案 1 :(得分:1)
在传递$ fileurl
之前使用base64_encode()$fileurl = base64_encode(YOUR_URL);
并解码控制器中的$ fileurl:
$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
$decoded_fileurl = base64_decode($fileurl);
// ..
});
答案 2 :(得分:0)
为什么不呢?
$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
$decoded_fileurl = urldecode($fileurl);
// ..
});
urldecode()
就是出于这个目的,你只需要确保在创建链接之前对网址进行编码,它就像{{ myvar|e('url') }}
一样简单,或者在php {{1我只是想在网址中传递电子邮件地址并遇到同样的问题。我在这里张贴后代。