Атрибут flashes переменной app
Атрибут flashes переменной app в Twig возвращает
флеш-сообщения из сессии. Флеш-сообщения - это короткие
уведомления, которые показываются пользователю один раз
после выполнения действия и затем автоматически удаляются.
Атрибут возвращает массив, где ключами являются типы
сообщений (например, 'success', 'error', 'warning'),
а значениями - массивы текстов сообщений этого типа.
Синтаксис
{% for type, messages in app.flashes %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endfor %}
Если нужно получить сообщения только одного типа, передаётся имя типа:
{% for message in app.flashes('success') %}
{{ message }}
{% endfor %}
Пример
Давайте добавим флеш-сообщение в контроллере и выведем его в шаблоне.
Сначала добавим сообщение через метод addFlash:
<?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
{
$this->addFlash('success', 'article created');
return $this->render('article/index.html.twig');
}
}
?>
Теперь выведем сообщение в шаблоне через атрибут flashes:
{% for type, messages in app.flashes %}
{% for message in messages %}
<p>{{ type }}: {{ message }}</p>
{% endfor %}
{% endfor %}
Результат выполнения кода:
<p>success: article created</p>
Пример
Давайте добавим несколько сообщений разных типов:
<?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
{
$this->addFlash('success', 'article created');
$this->addFlash('success', 'article published');
$this->addFlash('error', 'article not found');
$this->addFlash('warning', 'article outdated');
return $this->render('article/index.html.twig');
}
}
?>
Выведем все сообщения в шаблоне:
{% for type, messages in app.flashes %}
<div>
<strong>{{ type }}</strong>
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
</div>
{% endfor %}
Результат выполнения кода:
<div>
<strong>success</strong>
<ul>
<li>article created</li>
<li>article published</li>
</ul>
</div>
<div>
<strong>error</strong>
<ul>
<li>article not found</li>
</ul>
</div>
<div>
<strong>warning</strong>
<ul>
<li>article outdated</li>
</ul>
</div>
Пример
Давайте выведем сообщения только одного типа 'success':
{% for message in app.flashes('success') %}
<p>{{ message }}</p>
{% endfor %}
Результат выполнения кода:
<p>article created</p>
<p>article published</p>