会话Flash不起作用

时间:2015-05-27 13:59:49

标签: php laravel laravel-5

我有一个运行此控制器代码的表单;

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',

还有比我在这里尝试的更多吗?

1 个答案:

答案 0 :(得分:1)

假设您正在使用Maatwebsite/Laravel-Excel

Excel::create()->export();以下的任何内容都不会被执行。

导出方法使用当前连接将文件传输给用户。下载后的任何输出都将写入该文件。因此,导出方法会调用exit;函数以防止任何其他输出并确保有效文件。 (任何详细信息都在source code

一个可能的&#34;解决方案&#34;将Session::flash();向上移动。但这并不能解决向用户显示Flash消息的问题。

假设您有一个带有下载报告按钮的页面,该按钮会导致此控制器方法。用户点击它并开始下载。但是当前页面没有重新加载,闪存消息不会显示出来。仅当用户转到不同页面时,才会显示Flash消息。

为了避免这种情况,请使用一些JavaScript强制重新加载当前页面,或者在按下载按钮时让JavaScript显示flash消息。