在实体生命周期回调中访问当前用户

时间:2019-04-25 08:13:22

标签: symfony doctrine-orm

在我的理论实体中,我有一个生命周期回调,该回调需要访问当前登录的用户(例如TokenStorage)。

我可以坚持使用生命周期回调,还是必须切换到注入令牌存储的事件侦听器?

/** @ORM\HasLifecycleCallbacks() */
class Report {
    /** @ORM\PrePersist */
    public function onPrePersist(LifecycleEventArgs $args)
    {
        $this->updatedAt = new \DateTime();
        $this->lastUpdatedBy = ???->getToken()->getUser(); // <-----
    }
}

1 个答案:

答案 0 :(得分:1)

执行此操作的好方法是使用主义事件侦听器:

文件service.yml

    services:
         my_report_listener :
          class : App\EventListener\ReportListner
          arguments: ['@security.token_storage']
          tags:
             - { name: doctrine.event_listener, event: prePersist }

您的事件侦听器类:

    class ReportListner {

      private $tokenStorage;

      public function __construct(TokenStorageInterface $tokenStorage)
      {
         $this->tokenStorage= $tokenStorage;
      }

      public function prePersist(LifecycleEventArgs $args)
      {
        $entity = $args->getObject();
        if($entity instanceof Report){
         $current_user = $this->tokenStorage->getToken()->getUser();
        }
   }
}