Я пытаюсь отобразить flashbag на каждой странице при определенных условиях (вошли в систему, пользователь и т. Д.), Но я не уверен, как использовать правильный приемник событий, я думаю, может быть, мне нужен какой-нибудь приемник событий маршрутизации для этого...
Во всяком случае, я пытался с kernel.controller, но на нескольких страницах присутствует более 1 контроллера, отображающего контент, поэтому Я получаю дубликаты флэш-пакетов на этих страницах.Вот почему я думаю, что мне нужно использовать маршруты вместо контроллеров.
Пока это мой код, я пока избегал условий только для тестирования, если он работает (поэтому он всегда отображается на любой странице):
services.yml:
Appbundle\EventListener\ChapterFlashbagListener:
arguments: [ '@session','@doctrine.orm.entity_manager', '@security.token_storage', '@translator' ]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
ChapterFlashbagListener:
<?php
namespace AppBundle\EventListener;
use Symfony\Component\HttpFoundation\Session\Session;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Translation\TranslatorInterface;
class ChapterFlashbagListener
{
private $session;
private $em;
private $tokenStorage;
protected $translator;
public function __construct(Session $session, EntityManager $em, TokenStorageInterface $tokenStorage, TranslatorInterface $translator)
{
$this->session = $session;
$this->em = $em;
$this->tokenStorage = $tokenStorage;
$this->translator = $translator;
}
/**
* @param FilterControllerEvent $event
*/
public function preExecute(FilterControllerEvent $event)
{
$request = $event->getRequest();
$session = $request->getSession();
$m = $this->translator->trans('message');
$session->getFlashBag()->add('warning', $m);
}
}
Дополнительная информация: проект является бэкэндом с Sonata, еслиэта информация помогает