我正在使用 Symfony2 编写一个 Web 应用程序,我需要注册每个登录该应用程序的用户的最后访问权限。我的实体有一个last_access
属性,类型为 datetime。
代码很简单,我只需要获取当前用户的实体并设置值,但我不知道该把代码放在哪里。
我在想这样的事情:
$manager = $this->getDoctrine()->getManager();
$user= $this->get('security.context')->getToken()->getUser();
$user->setLastAccess(new \DateTime('now'));
$manager->persist($user);
$manager->flush();
更新
我使用事件侦听器解决了这个问题。
class LoginListener {
/**
* @var Doctrine\Bundle\DoctrineBundle\Registry
*/
private $doctrine;
public function __construct(Doctrine $doctrine){
$this->doctrine = $doctrine;
}
public function onInteractiveLogin(InteractiveLoginEvent $event){
$user = $event->getAuthenticationToken()->getUser();
if ($user) {
$user->setLastAccess(new \DateTime('now'));
$this->doctrine->getEntityManager()->persist($user);
$this->doctrine->getEntityManager()->flush();
}
}
}
我还创建了一个服务:
services:
my.service:
class: SGRH\AdminBundle\Listener\LoginListener
arguments: [@doctrine]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
谢谢大家!