Метод set класса FlashBag
Метод set класса FlashBag добавляет flash-сообщение
в сессию. Первым параметром передаётся тип сообщения,
вторым - текст или массив сообщений. В отличие от метода
add,
который добавляет сообщение к уже существующим, метод set
полностью заменяет все сообщения указанного типа.
Синтаксис
public function set(string $type, string|array $messages): void
Пример
Давайте установим flash-сообщение типа 'success':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$flashBag = $this->container->get('request_stack')
->getSession()
->getFlashBag();
$flashBag->set('success', 'article saved');
return new Response('flash set');
}
}
?>
Результат выполнения кода:
flash set
Пример
Давайте передадим массив сообщений - все они будут сохранены
под одним типом 'notice':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/list', name: 'article_list')]
public function list(): Response
{
$flashBag = $this->container->get('request_stack')
->getSession()
->getFlashBag();
$flashBag->set('notice', ['article 1', 'article 2', 'article 3']);
return new Response('flash array set');
}
}
?>
Результат выполнения кода:
flash array set
Пример
Давайте убедимся, что повторный вызов set затирает
предыдущие сообщения того же типа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/replace', name: 'article_replace')]
public function replace(): Response
{
$flashBag = $this->container->get('request_stack')
->getSession()
->getFlashBag();
$flashBag->set('success', 'hello');
$flashBag->set('success', 'abcde');
$res = $flashBag->get('success');
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
FlashBag,
который хранит flash-сообщения сессии -
метод
add,
который добавляет сообщение к существующим -
метод
get,
который извлекает и удаляет сообщения типа -
метод
getFlashBag,
который возвращает объект FlashBag из сессии