Реклама
Рубрики блога
Архив статей
Облако тегов
Слушатель события Входа на сайт в 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