Метод keys класса FlashBag
Метод keys класса FlashBag возвращает список
ключей flash-уведомлений, которые на данный момент хранятся
в сессии и ещё не были получены. Метод не принимает
параметров и возвращает индексированный массив строк.
Ключи соответствуют типам уведомлений, например 'success',
'error' или 'warning'.
Метод полезен, когда нужно узнать, какие типы уведомлений
присутствуют в сессии, не извлекая и не удаляя их.
В отличие от метода all, вызов keys не очищает
flash-пакет, поэтому уведомления остаются доступными
для последующего чтения.
Синтаксис
public function keys(): array
Пример
Давайте получим flash-пакет из сессии и выведем ключи хранящихся в нём уведомлений:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article 1');
$flashBag->add('error', 'article 2');
$flashBag->add('warning', 'article 3');
$res = $flashBag->keys();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["success", "error", "warning"]
Пример
Давайте проверим, что метод keys не удаляет
уведомления и их можно прочитать после вызова:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'hello');
$res = $flashBag->keys();
$messages = $flashBag->get('success');
return new Response(json_encode([
'keys' => $res,
'messages' => $messages,
]));
}
}
?>
Результат выполнения кода:
{"keys":["success"],"messages":["hello"]}
Пример
Давайте используем метод keys для перебора
всех типов уведомлений и вывода их через Twig:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$session = $request->getSession();
$flashBag = $session->getFlashBag();
$flashBag->add('success', 'article 1');
$flashBag->add('error', 'article 2');
return $this->render('article/index.html.twig', [
'keys' => $flashBag->keys(),
'flashBag' => $flashBag,
]);
}
}
?>
Теперь выведем уведомления в шаблоне:
{% for key in keys %}
<p>{{ key }}: {{ flashBag.get(key)|join(', ') }}</p>
{% endfor %}
Результат выполнения кода:
<p>success: article 1</p>
<p>error: article 2</p>