Реклама
Рубрики блога
Архив статей
Облако тегов
Слушатель события Входа на сайт в Symfony 2
пятница, 4 июля 2014 07:40:55, написал Admin
После успешного входа на сайт бывает необходимо сделать какие-то дополнительные действия. Например, в моем случае нужно было обновить время последнего посещения сайта пользователем.
Для этих целей будем использовать Event Listener (слушатель событий). Будем использовать глобальный сервис «security.context» и его событие «security.interactive_login»
В services.yml пишем
login_listener: class: Acme\UserBundle\Listener\LoginListener arguments: [@security.context, @doctrine.orm.entity_manager] tags: - { name: kernel.event_listener, event: security.interactive_login }
В LoginListener.php
<?php namespace Acme\UserBundle\Listener; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Core\SecurityContext; use Doctrine\ORM\EntityManager; /** * Custom login listener. */ class LoginListener { /** @var \Symfony\Component\Security\Core\SecurityContext */ private $securityContext; /** @var \Doctrine\ORM\EntityManager */ private $em; /** * Constructor * * @param SecurityContext $securityContext * @param EntityManager $em */ public function __construct(SecurityContext $securityContext, EntityManager $em) { $this->securityContext = $securityContext; $this->em = $em; } /** * Do the magic. * * @param InteractiveLoginEvent $event */ public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) { if ($this->securityContext->isGranted('IS_AUTHENTICATED_FULLY')) { // user has just logged in } if ($this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) { // user has logged in using remember_me cookie } // do some other magic here $user = $event->getAuthenticationToken()->getUser(); // ... } }
По материалам статьи http://www.metod.si/login-event-listener-in-symfony2/
Symfony2 Symfony2