Symfony 3.4 event listener for routing
up vote
0
down vote
favorite
Im trying to display a flashbag on every page under certain conditions (loged in user, etc...), but im not sure how to use the right event listener, i think maybe I need some routing event listener for that...
Anyway, I tried with kernel.controller but in several pages there are more than 1 controller rendering content so I get duplicate flashbags in those pages. Thats why I think I need to use routes instead of controllers.
This is my code so far, I avoided conditions for now only to testing if its working (so it shows in any page always):
services.yml:
AppbundleEventListenerChapterFlashbagListener:
arguments: [ '@session','@doctrine.orm.entity_manager', '@security.token_storage', '@translator' ]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
ChapterFlashbagListener:
<?php
namespace AppBundleEventListener;
use SymfonyComponentHttpFoundationSessionSession;
use DoctrineORMEntityManager;
use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
use SymfonyComponentTranslationTranslatorInterface;
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);
}
}
Additional info: The project is a backend with Sonata if that info helps
symfony routing listener symfony3.4
add a comment |
up vote
0
down vote
favorite
Im trying to display a flashbag on every page under certain conditions (loged in user, etc...), but im not sure how to use the right event listener, i think maybe I need some routing event listener for that...
Anyway, I tried with kernel.controller but in several pages there are more than 1 controller rendering content so I get duplicate flashbags in those pages. Thats why I think I need to use routes instead of controllers.
This is my code so far, I avoided conditions for now only to testing if its working (so it shows in any page always):
services.yml:
AppbundleEventListenerChapterFlashbagListener:
arguments: [ '@session','@doctrine.orm.entity_manager', '@security.token_storage', '@translator' ]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
ChapterFlashbagListener:
<?php
namespace AppBundleEventListener;
use SymfonyComponentHttpFoundationSessionSession;
use DoctrineORMEntityManager;
use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
use SymfonyComponentTranslationTranslatorInterface;
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);
}
}
Additional info: The project is a backend with Sonata if that info helps
symfony routing listener symfony3.4
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Im trying to display a flashbag on every page under certain conditions (loged in user, etc...), but im not sure how to use the right event listener, i think maybe I need some routing event listener for that...
Anyway, I tried with kernel.controller but in several pages there are more than 1 controller rendering content so I get duplicate flashbags in those pages. Thats why I think I need to use routes instead of controllers.
This is my code so far, I avoided conditions for now only to testing if its working (so it shows in any page always):
services.yml:
AppbundleEventListenerChapterFlashbagListener:
arguments: [ '@session','@doctrine.orm.entity_manager', '@security.token_storage', '@translator' ]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
ChapterFlashbagListener:
<?php
namespace AppBundleEventListener;
use SymfonyComponentHttpFoundationSessionSession;
use DoctrineORMEntityManager;
use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
use SymfonyComponentTranslationTranslatorInterface;
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);
}
}
Additional info: The project is a backend with Sonata if that info helps
symfony routing listener symfony3.4
Im trying to display a flashbag on every page under certain conditions (loged in user, etc...), but im not sure how to use the right event listener, i think maybe I need some routing event listener for that...
Anyway, I tried with kernel.controller but in several pages there are more than 1 controller rendering content so I get duplicate flashbags in those pages. Thats why I think I need to use routes instead of controllers.
This is my code so far, I avoided conditions for now only to testing if its working (so it shows in any page always):
services.yml:
AppbundleEventListenerChapterFlashbagListener:
arguments: [ '@session','@doctrine.orm.entity_manager', '@security.token_storage', '@translator' ]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
ChapterFlashbagListener:
<?php
namespace AppBundleEventListener;
use SymfonyComponentHttpFoundationSessionSession;
use DoctrineORMEntityManager;
use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
use SymfonyComponentTranslationTranslatorInterface;
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);
}
}
Additional info: The project is a backend with Sonata if that info helps
symfony routing listener symfony3.4
symfony routing listener symfony3.4
asked Nov 8 at 9:34
LauraEld
106
106
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You need to check wether the request is the master request to avoid those dublicate messages.
This can be done as follows:
use SymfonyComponentHttpKernelHttpKernelInterface;
if ($event->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
return;
}
$this->session->getFlashBag()->add('warning', $warning);
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use$event->isMasterRequest()
.. does the same
– Slatyoo
Nov 8 at 15:56
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You need to check wether the request is the master request to avoid those dublicate messages.
This can be done as follows:
use SymfonyComponentHttpKernelHttpKernelInterface;
if ($event->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
return;
}
$this->session->getFlashBag()->add('warning', $warning);
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use$event->isMasterRequest()
.. does the same
– Slatyoo
Nov 8 at 15:56
add a comment |
up vote
1
down vote
accepted
You need to check wether the request is the master request to avoid those dublicate messages.
This can be done as follows:
use SymfonyComponentHttpKernelHttpKernelInterface;
if ($event->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
return;
}
$this->session->getFlashBag()->add('warning', $warning);
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use$event->isMasterRequest()
.. does the same
– Slatyoo
Nov 8 at 15:56
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You need to check wether the request is the master request to avoid those dublicate messages.
This can be done as follows:
use SymfonyComponentHttpKernelHttpKernelInterface;
if ($event->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
return;
}
$this->session->getFlashBag()->add('warning', $warning);
You need to check wether the request is the master request to avoid those dublicate messages.
This can be done as follows:
use SymfonyComponentHttpKernelHttpKernelInterface;
if ($event->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
return;
}
$this->session->getFlashBag()->add('warning', $warning);
answered Nov 8 at 10:00
nifr
39.4k7104114
39.4k7104114
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use$event->isMasterRequest()
.. does the same
– Slatyoo
Nov 8 at 15:56
add a comment |
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use$event->isMasterRequest()
.. does the same
– Slatyoo
Nov 8 at 15:56
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
This works perfect! Thank you! One more thing for the record... I was on development environment so it seems the toolbar does another master request and still get 2 flashbags, I turned toolbar to false in config_dev.yml to get only one flashbag. In prod env should work fine. Found the answer to that issue on stackoverflow.com/questions/44606796/…
– LauraEld
Nov 8 at 11:29
You could also just use
$event->isMasterRequest()
.. does the same– Slatyoo
Nov 8 at 15:56
You could also just use
$event->isMasterRequest()
.. does the same– Slatyoo
Nov 8 at 15:56
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53204925%2fsymfony-3-4-event-listener-for-routing%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password