在我的理论实体中,我有一个生命周期回调,该回调需要访问当前登录的用户(例如TokenStorage
)。
我可以坚持使用生命周期回调,还是必须切换到注入令牌存储的事件侦听器?
/** @ORM\HasLifecycleCallbacks() */
class Report {
/** @ORM\PrePersist */
public function onPrePersist(LifecycleEventArgs $args)
{
$this->updatedAt = new \DateTime();
$this->lastUpdatedBy = ???->getToken()->getUser(); // <-----
}
}
答案 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();
}
}
}