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

Поделиться статьей с друзьями:

  

Комментарии к статье