2015-05-27 3 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 делает данные доступными только для текущего и следующего запросов (только!). Если вы выполните сеанс :: flash(), сообщение все еще доступно, но если во время загрузки страницы выполняется запрос Ajax. Данные недоступны, поскольку запрос ajax потребляет данные. – ChainList

ответ

1

Предполагая, что вы используете Maatwebsite/Laravel-Excel.

Все, что находится ниже Excel::create()->export();, никогда не выполняется.

Метод экспорта использует текущее соединение для передачи файла пользователю. Любой результат после загрузки будет записан в этот файл. Таким образом, метод export вызывает функцию exit; для предотвращения любого дополнительного вывода и обеспечения допустимого файла. (Любые детали указаны в source code)

Таким образом, одним из возможных «решений» было бы перемещение Session::flash(); вверх. Но это не решит вашу проблему с отображением пользователя флеш-сообщения.

Предполагая, что у вас есть страница с Загрузить отчет кнопка, которая ведет к этому методу контроллера. Пользователи нажимают на нее и запускают загрузку. Но текущая страница не перезагружается, сообщение вспышки не отображается. Только если пользователи перейдут на другую страницу, отобразится флэш-сообщение.

Чтобы избежать этого, используйте JavaScript для принудительной перезагрузки текущей страницы или предоставления JavaScript для отображения флэш-сообщения для вас при нажатии кнопки загрузки.

Смежные вопросы