[英]Pass URL as parameter in silex controller
我想將url作為參數傳遞給控制器,如下所示:
$api->get('/getfile/{fileurl}', function(Request $request, $fileurl){
//do something
}
{fileurl}可以是有效的http網址。 但是,上面的映射無法正常工作並產生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()
正是用於此目的的,您只需要確保在創建鏈接之前就對URL進行編碼即可,它就像在{{ myvar|e('url') }}
或php urlencode($myvar)
我只是想在URL中傳遞電子郵件地址,並遇到相同的問題。 我將其張貼在這里以供后代使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.