我试图找到一种方法,既可以返回视图,也可以调用下载函数。类似这样的东西:
return view('home')->download($filename, 'text.csv', $headers);
我认为这是不可能的。Laravel必须选择发送到浏览器的内容。如果它发送重定向标头,您将看不到该页面。
唯一的解决方案是渲染视图,并在视图中放置一个简单的javascript,如:
window.location.href = "<your file url>"
如果这是一个文件,它应该在不更改页面的情况下开始下载。
目前有一种使用流下载的方法。它不漂亮,但很管用。请注意,函数必须为echo
,而不是return
,因此在视图中调用render()
。
return response()->streamDownload(function() {
echo view('home')->render();
}
, 'test.csv'
, ['Content-Type' => 'text/csv']
);