Метод peek класса FlashBag
Метод peek класса FlashBag возвращает массив
flash-сообщений указанного типа, но в отличие от метода
get не удаляет их из сессии. Первым параметром
передаётся тип сообщения в виде строки. Если сообщений
указанного типа нет, метод вернёт пустой массив.
Метод удобно использовать, когда нужно показать flash-сообщения, не «съедая» их - например, при отладке или при отображении уведомлений сразу в нескольких местах страницы.
Синтаксис
public function peek(string $type): array
Пример
Давайте добавим два flash-сообщения типа 'notice' и
посмотрим на них через метод peek:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$flashBag = $this->getRequest()->getSession()->getFlashBag();
$flashBag->add('notice', 'article 1');
$flashBag->add('notice', 'article 2');
$res = $flashBag->peek('notice');
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["article 1", "article 2"]
Пример
Давайте убедимся, что после вызова peek сообщения
остаются в сессии. Сначала вызовем peek, затем
get:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$flashBag = $this->getRequest()->getSession()->getFlashBag();
$flashBag->add('notice', 'hello');
$peekRes = $flashBag->peek('notice');
$getRes = $flashBag->get('notice');
return new Response(json_encode([
'peek' => $peekRes,
'get' => $getRes,
]));
}
}
?>
Результат выполнения кода:
{"peek":["hello"],"get":["hello"]}
Пример
Давайте попробуем посмотреть flash-сообщения несуществующего
типа 'warning':
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$flashBag = $this->getRequest()->getSession()->getFlashBag();
$flashBag->add('notice', 'abcde');
$res = $flashBag->peek('warning');
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[]