Symfony2: после успешного входа в систему выполните ряд действий

Мне нужно выполнить набор действий после успешного входа пользователя в систему. Сюда входит загрузка данных из базы данных и сохранение их в сеансе.

Каков наилучший подход к реализации этого?

Solutions Collecting From Web of "Symfony2: после успешного входа в систему выполните ряд действий"

Вы можете добавить слушателя в событие security.interactive_login .

прикрепите своего слушателя так. В этом примере я также передаю контекст безопасности и сеанс как зависимости.

Примечание. SecurityContext устарел с Symfony 2.6. См. http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

 parameters: # ... account.security_listener.class: Company\AccountBundle\Listener\SecurityListener services: # ... account.security_listener: class: %account.security_listener.class% arguments: ['@security.context', '@session'] tags: - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin } 

и в вашем слушателе вы можете хранить все, что захотите, в сеансе. В этом случае я устанавливаю часовой пояс пользователей.

 <?php namespace Company\AccountBundle\Listener; use Symfony\Component\Security\Core\SecurityContextInterface; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; class SecurityListener { public function __construct(SecurityContextInterface $security, Session $session) { $this->security = $security; $this->session = $session; } public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) { $timezone = $this->security->getToken()->getUser()->getTimezone(); if (empty($timezone)) { $timezone = 'UTC'; } $this->session->set('timezone', $timezone); } } 

Вы даже можете извлечь экземпляр пользователя из самого события, не нужно вводить хранилище токенов!

 public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) { $event->getAuthenticationToken()->getUser() }