簡體   English   中英

在Silex控制器中將URL作為參數傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM