Метод add класса FlashBag
Метод add класса FlashBag добавляет
временное сообщение в сессию. Такие сообщения
называются flash-сообщениями: они доступны только
в следующем запросе, после чего автоматически
удаляются. Первым параметром передаётся тип
сообщения, например 'success' или
'error'. Вторым параметром передаётся текст
сообщения.
Тип сообщения используется как ключ, по которому позже можно получить все сообщения этого типа. Одно и то же сообщение можно добавить несколько раз, тогда метод вернёт массив всех добавленных значений.
Синтаксис
$flashBag->add(string $type, mixed $message): void
Пример
Давайте добавим flash-сообщение в сессию через контроллер:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article saved');
return new Response('ok');
}
}
?>
Результат выполнения кода:
ok
После выполнения запроса сообщение 'article saved'
будет доступно в следующем запросе под ключом
'success'.
Пример
Давайте добавим несколько сообщений одного типа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article 1');
$flashBag->add('success', 'article 2');
$flashBag->add('success', 'article 3');
return new Response('ok');
}
}
?>
Результат выполнения кода:
ok
В следующем запросе метод get вернёт массив
из трёх сообщений:
["article 1", "article 2", "article 3"]
Пример
Давайте добавим сообщения разных типов:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article saved');
$flashBag->add('error', 'user not found');
return new Response('ok');
}
}
?>
Результат выполнения кода:
ok
Теперь в следующем запросе можно получить сообщения по каждому типу отдельно:
$flashBag->get('success'); // ['article saved']
$flashBag->get('error'); // ['user not found']
Смотрите также
-
класс
FlashBag,
который хранит flash-сообщения сессии -
метод
get,
который возвращает сообщения по типу -
метод
all,
который возвращает все flash-сообщения -
метод
getFlashBag,
который возвращает объект FlashBag из сессии