我有一个运行此控制器代码的表单;
public function index()
{
$date = date("Ymd");
$temp_table = new TempTable;
$generated_temp_table = $_POST['generated_temp_table'];
$temp_table_data = $temp_table->setTempTable($generated_temp_table)->newQuery()->with('payment')->get();
$payments = [];
foreach($temp_table_data as $a_payment) {
array_push($payments, $a_payment->payment->first()->attributesToArray());
}
//then create the Excel file
Excel::create($date.'-SME_Payments_Export-U', function($excel) use ($payments) {
$excel->sheet('Excel sheet', function($sheet) use ($payments) {
$sheet->setOrientation('landscape');
$sheet->fromArray($payments);
});
})->export('csv');
\Session::flash('flash_message', 'Your CSV is downloading');
Redirect::back();
}
未显示flash
消息。这是视图代码;
@if(Session::has('flash_message'))
<div class="alert alert-success {{Session::has('flast_message_important') ? 'alert-important' : ''}}">
@if(Session::has('flash_message_important'))
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
@endif
{{ session('flash_message')}}
</div>
@endif
我已将use Session;
包含在两个控制器的顶部。这是在config / app.php;
'Session' => 'Illuminate\Support\Facades\Session',
还有比我在这里尝试的更多吗?
答案 0 :(得分:1)
假设您正在使用Maatwebsite/Laravel-Excel。
Excel::create()->export();
以下的任何内容都不会被执行。
导出方法使用当前连接将文件传输给用户。下载后的任何输出都将写入该文件。因此,导出方法会调用exit;
函数以防止任何其他输出并确保有效文件。 (任何详细信息都在source code)
一个可能的&#34;解决方案&#34;将Session::flash();
向上移动。但这并不能解决向用户显示Flash消息的问题。
假设您有一个带有下载报告按钮的页面,该按钮会导致此控制器方法。用户点击它并开始下载。但是当前页面没有重新加载,闪存消息不会显示出来。仅当用户转到不同页面时,才会显示Flash消息。
为了避免这种情况,请使用一些JavaScript强制重新加载当前页面,或者在按下载按钮时让JavaScript显示flash消息。