Метод flash
Метод flash класса Session в Laravel используется для записи данных в сессию с пометкой "однократного использования". После того как данные будут извлечены из сессии при следующем запросе, они автоматически удаляются. Первым параметром передаётся ключ, вторым - значение, которое нужно сохранить. Если передан только ключ, метод возвращает текущее flash-значение или null.
Синтаксис
<?php
session()->flash($key, $value);
?>
Пример
Сохраним сообщение об успешной операции в сессии с помощью метода flash:
<?php
namespace AppHttpControllers;
use AppModelsProduct;
use IlluminateHttpRequest;
class ProductController extends Controller
{
public function store(Request $request)
{
// Product creation logic
$product = new Product();
$product->name = $request->input('name');
$product->save();
session()->flash('success', 'Product created successfully');
return redirect()->route('products.index');
}
}
?>
После редиректа в методе index мы можем получить сохранённое сообщение:
<?php
namespace AppHttpControllers;
use AppModelsProduct;
class ProductController extends Controller
{
public function index()
{
$products = Product::all();
$message = session()->get('success');
return view('products.index', ['products' => $products, 'message' => $message]);
}
}
?>
Результат выполнения кода:
"Product created successfully"
Пример
Метод flash также может использоваться для сохранения нескольких значений одновременно с помощью массива:
<?php
namespace AppHttpControllers;
use AppModelsUser;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$user = User::findOrFail($id);
$user->name = $request->input('name');
$user->save();
session()->flash([
'success' => 'User updated successfully',
'user_id' => $user->id
]);
return redirect()->route('users.index');
}
}
?>
Получение flash-данных в представлении:
@if (session()->has('success'))
<div class="alert alert-success">
{{ session()->get('success') }}
</div>
@endif
@if (session()->has('user_id'))
<p>Updated user ID: {{ session()->get('user_id') }}</p>
@endif
Пример
Если вы хотите сохранить flash-данные, но при этом не удалять их при следующем запросе, можно использовать метод reflash, который сохраняет все текущие flash-данные ещё на один запрос:
<?php
namespace AppHttpControllers;
use AppModelsOrder;
use IlluminateHttpRequest;
class OrderController extends Controller
{
public function process(Request $request)
{
// Some processing logic
$order = new Order();
$order->status = 'processed';
$order->save();
session()->flash('order_id', $order->id);
// Preserve flash data for another request
session()->reflash();
return redirect()->route('orders.summary');
}
}
?>
В этом случае flash-данные будут доступны не только на следующем, но и на последующем запросе.
Смотрите также
-
метод
Request::flash,
который сохраняет в сессию данные запроса -
метод
Session::get,
который получает данные из сессии -
метод
Session::put,
который сохраняет данные в сессии на длительный срок -
метод
RedirectResponse::with,
который позволяет передавать flash-данные при редиректе