我正在使用maatwebsite / excel库创建excel文件,然后下载我的文件
在我的控制器中,我这样做:
public function todas() { $input = Input::all(); if(isset($input['todos'])&&($input['todos']!=0)) { set_time_limit(0); $datainicio = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('periodo_inicio'); $datafinal = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('periodo_fim'); $mes = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('mes_referencia'); $horarioQuery = $this->horario->with(array('funcionario', 'item_contabil')) ->whereBetween('data', array($datainicio, $datafinal)) ->whereNull('deleted_at') ->orderBy('cod_funcionario') ->orderBy('data', 'ASC') ->get(); $horarios = reset($horarioQuery); $count = count($horarios); if($horarios==null) return Redirect::route('relatorios.todas')->withErrors(['não existem marcações para este período']); $funcionarios = $this->funcionario->all(); $datainicio = Carbon::createFromFormat('Y-m-d H:i:s', $datainicio); $datafinal = Carbon::createFromFormat('Y-m-d H:i:s', $datafinal); $nome = 'Marcações'.$mes.'-'.Carbon::now()->year; $this->horario->allToExcel($nome, $horarios); return View::make('relatorios.todashow', compact('funcionarios', 'datainicio', 'datafinal', 'horarios', 'count', 'nome')); } else { return Redirect::route('relatorios.todas')->withErrors(['Selecione um período!']); } }
这是我生成excel文件的功能:
public static function allToExcel($nome, $horarios) { Excel::create($nome , function ($excel) use ($horarios) { $excel->sheet('Marcações', function ($sheet) use ($horarios) { $sheet->row(1, array( 'Unidade', 'Nome', 'Função', 'Data', 'Hora Faturada', 'Hora Contratada', 'Horas Trabalhadas', 'Horas Extras', 'Tempo Exposicao', 'Atividade', 'Item Contabil', 'Observacoes' )); $sheet->row(1, function($row) { $row->setBackground('#2A8005'); $row->setFontColor('#ffffff'); $row->setFontWeight('bold'); }); $i = 2; foreach ($horarios as $horario) { if($horario->funcionario->funcao_qt != null) $funcao = $horario->funcionario->funcao_qt; else $funcao = $horario->funcionario->funcao_a5; $sheet->row($i, array( $horario->unidade, $horario->funcionario->nome, $funcao, $horario->data->format('d/m/Y'), $horario->hora_faturada->format('H:i'), $horario->hora_contratada, $horario->getWorkedHours()->format('H:i'), $horario->getExtraHours()->format('H:i'), $horario->tempo_exposicao ?: "-", $horario->atividade, $horario->item_contabil->CTD_DESC01, $horario->observacoes )); if($i % 2 != 0) { $sheet->row($i, function($row) { $row->setBackground('#D1D1D1'); }); } $i++; } }); })->download('xls'); }
但是在下载excel文件后,我无法重定向到路线或视图,并且我也尝试使用:
路线:
Route::post('relatorios/todas', array('as' => 'relatorios.todas', 'after' => 'voltar', 'uses' => 'ReportsController@todas'));
过滤:
Route::filter('voltar', function() { return Redirect::back()->with('message', '<p class="bg-success"><b>Relatório gerado com sucesso</b></p>'); });
但无论如何都没用,下载我的文件后还有另一种重定向的方式?
提前谢谢!
无法完成。问题是,如果您向用户浏览器发送下载指令,则实际上是在发送响应,并且只能发送回一个响应。
您可以做的是,首先将您的用户重定向到“最终”页面,然后在该页面中开始下载。该代码将类似于:
Session::flash('download.in.the.next.request', 'filetodownload.pdf'); return Redirect::to('/whatever/page');
然后在新页面中,您将有一些选择:
因此,您可以在布局中执行以下操作:
<html> <head> @if(Session::has('download.in.the.next.request')) <meta http-equiv="refresh" content="5;url={{ Session::get('download.in.the.next.request') }}"> @endif <head> <body> ... </body> </html>