Метод getFlashBag
Метод getFlashBag класса Session возвращает объект FlashBag, который хранит flash-сообщения. Flash-сообщения - это данные, которые живут в сессии до следующего запроса, после чего автоматически удаляются. Параметров метод не принимает. Получить объект сессии можно через RequestStack или через аргумент SessionInterface в методе контроллера.
Синтаксис
$flashBag = $session->getFlashBag();
Пример
Давайте добавим flash-сообщение в одном действии контроллера и выведем его в другом:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/add', name: 'article_add')]
public function add(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article added');
return $this->redirectToRoute('article_show');
}
#[Route('/article/show', name: 'article_show')]
public function show(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$messages = $flashBag->get('success');
return new Response(implode(', ', $messages));
}
}
?>
Результат выполнения кода после перехода на /article/add и редиректа:
"article added"
Пример
Давайте получим все flash-сообщения сразу с помощью метода all:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/flash', name: 'article_flash')]
public function flash(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article 1');
$flashBag->add('success', 'article 2');
$flashBag->add('error', 'article 3');
$all = $flashBag->all();
return new Response(json_encode($all));
}
}
?>
Результат выполнения кода:
{"success":["article 1","article 2"],"error":["article 3"]}