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