2015-05-27 147 views
1

我有一個窗體運行此控制器代碼;會話閃存不工作

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">&times;</button> 
     @endif 
     {{ session('flash_message')}} 
    </div> 
@endif 

我已經在兩個控制器的頂部包含了use Session;。這裏是在config/app.php中;

'Session' => 'Illuminate\Support\Facades\Session', 

有沒有比我在這裏嘗試的更多呢?

+0

您是否在加載頁面期間發出任何ajax請求?如果是這樣,Session :: flash會使數據僅用於當前和下一個請求(僅限!)。如果您創建Session :: flash(),則該消息仍然可用,但是如果在頁面加載期間完成了Ajax請求。數據不可用,因爲ajax請求消耗了數據。 – ChainList

回答

1

假設您使用的是Maatwebsite/Laravel-Excel

從不執行低於Excel::create()->export();的任何內容。

導出方法使用當前連接將文件傳輸給用戶。下載後的任何輸出都將寫入該文件。所以導出方法調用exit;函數來防止任何額外的輸出並確保有效的文件。 (任何細節都在source code

所以一個可能的「解決方案」是將Session::flash();向上移動。但是這並不能解決你向用戶顯示閃光消息的問題。

假設您有一個帶有導致此控制器方法的按鈕的頁面下載報告。用戶點擊它並開始下載。但是當前頁面沒有被重新加載,閃光消息不會顯示出來。只有當用戶轉到其他頁面時,纔會顯示閃光消息。

要避免使用某些JavaScript來強制重新加載當前頁面,或者使JavaScript在按下下載按鈕時顯示Flash消息。