Метод reflash
Метод reflash применяется к объекту сессии и позволяет восстановить все flash-данные, которые были помечены для удаления после следующего запроса. Flash-данные сохраняются в сессии только на один запрос, но с помощью метода reflash можно продлить их жизнь ещё на один запрос. Это удобно, когда нужно сохранить данные формы или сообщения об ошибках после перенаправления. Метод не принимает параметров и возвращает текущий объект сессии.
Синтаксис
<?php
session()->reflash();
?>
Пример
Давайте сохраним flash-данные в сессии, а затем восстановим их с помощью метода reflash:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
// Сохраняем flash-данные
session()->flash('message', 'Article created successfully');
session()->flash('status', 'success');
// Восстанавливаем все flash-данные на следующий запрос
session()->reflash();
return redirect()->route('articles.index');
}
}
?>
Пример
Восстановим flash-данные в шаблоне Blade после перенаправления:
@if (session()->has('message'))
<div class="alert alert-{{ session('status') }}">
{{ session('message') }}
</div>
@endif
<h1>Articles list</h1>
Пример
Покажем разницу между обычными flash-данными и восстановленными через метод reflash. В контроллере сохраним два разных сообщения:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class MessageController extends Controller
{
public function show(Request $request)
{
// Первое сообщение - обычный flash
session()->flash('first_message', 'This message will be removed');
// Второе сообщение - flash с восстановлением
session()->flash('second_message', 'This message will be kept');
session()->reflash();
return view('messages');
}
}
?>
В шаблоне выведем оба сообщения:
<div>
@if (session()->has('first_message'))
<p>First message: {{ session('first_message') }}</p>
@endif
@if (session()->has('second_message'))
<p>Second message: {{ session('second_message') }}</p>
@endif
</div>
После первого обновления страницы только второе сообщение будет доступно, так как оно было восстановлено методом reflash:
<p>Second message: This message will be kept</p>