0

我想将 url 作为参数传递给控制器​​,如下所示:

$api->get('/getfile/{fileurl}', function(Request $request, $fileurl){
              //do something
}

这里的 {fileurl} 可以是一个有效的 http url。但是,上面的映射不起作用并导致 404(可能是因为 {fileurl} 部分中的斜线?)。如何解决它以接受 $fileurl 变量中的 $url?

4

3 回答 3

2

您需要检查与 fileurl 部分匹配斜杠匹配的正则表达式,因为默认情况下它不会这样做。

只需assert("fileurl", ".*")像这样在您的路线上拨打电话:

$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
    // ...
})->assert("fileurl", ".*");

确保它是你的最后一个参数,因为它会吞噬一切。

于 2013-09-14T06:39:29.713 回答
1

在传递 $fileurl 之前使用 base64_encode()

$fileurl = base64_encode(YOUR_URL);

并在您的控制器中解码 $fileurl:

$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
  $decoded_fileurl = base64_decode($fileurl);
  // ..
});
于 2013-09-14T23:38:25.717 回答
0

为什么不?

$app->get("/getfile/{fileurl}", function ($fileurl) use ($app) {
  $decoded_fileurl = urldecode($fileurl);
  // ..
});

urldecode()正是为了这个目的,您只需要确保在 twig 中创建链接之前对 url 进行编码,它就像{{ myvar|e('url') }}在 php 中一样简单,urlencode($myvar)我只是试图在 url 中传递电子邮件地址并遇到同样的问题。我把它贴在这里以供后代使用。

于 2015-12-14T20:33:34.227 回答