我正在尝试在我的视图中制作动态下载链接列表,但我不太确定如何为每个链接返回 response::download
这是我试过的......
1.-我的观点
@extends('layouts.main')
@section('content')
@foreach($files as $file)
<div class = "row fondue">
<h3><div class="col-md-12"><b><?php echo link_to("/home/download",$file->name,$file)?> </b></div></h3>
</div>
@endforeach
@stop
我不确定我是否可以向link_to发送第三个参数
2.-我的路线
Route::get('/home/download','HomeController@downloadfile')->before('auth');
3.-我在控制器中的功能
public function downloadfile($file)
{
return Response::download($file->route);
}
视图看起来很正常,但点击链接即可获得 错误:
"Missing argument 1 for HomeController::downloadfile()"
所以我的疑问是......我如何将我视图中链接中遗失的参数发送给我的控制器?
也......有更好的方法吗?
答案 0 :(得分:1)
您收到的错误是,您的方法downloadfile()
希望传递$file
,但您的路线不会给它一个。因此,您需要使用参数更新路线,如下所示:
Route::get('/home/download/{$file}','HomeController@downloadfile')->before('auth');
但是,由于我们要将内容传递给它,我建议将其命名为 - 以后会更容易:
Route::get('/home/download/{$file}', [
'as' => 'download.file',
'uses' => 'HomeController@downloadfile']
)->before('auth');
接下来,正如您猜测的那样,您需要更新链接。 link_to()
辅助函数不接受参数数组,这就是我们现在使用命名路由的原因,因此我们现在可以使用link_to_route()
- 让我们看一下the documentation:< / p>
echo link_to_route('route.name', $title, $parameters = array(), $attributes = array());
这意味着我们可以重写。而且,不要忘记你正在使用Blade - 不需要php标签。所以我们最终得到了这个:
{{ link_to_route('download.file', $file->name, [$file->id]) }}
最后,我不知道你的应用程序逻辑,但你的控制器方法可能需要从找到你现在提供的id的文件开始。这是一个例子,但它实际上取决于你的应用程序的外观。
public function downloadfile($id)
{
$file = SomeFileModel::findOrFail($id);
return Response::download($file->route);
}
希望有所帮助!祝你好运。
答案 1 :(得分:0)
将link_to函数更改为
link_to("/home/download/$file->name",$file->name)
将您的路线更改为:
Route::get('/home/download/{name?}','HomeController@downloadfile')->before('auth');
之后,您将能够在下载文件函数中看到参数