将URL作为参数传递给silex控制器

时间:2013-09-14 03:45:29

标签: php url silex

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

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

此处{fileurl}可以是有效的http网址。但是,上面的映射不起作用并产生404(可能是因为{fileurl}部分中的斜杠?)。如何解决它接受$ fileurl变量中的$ url?

3 个答案:

答案 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我只是想在网址中传递电子邮件地址并遇到同样的问题。我在这里张贴后代。