在我的学说实体中,我有一个生命周期回调,需要访问当前登录的用户(类似于 TokenStorage
(。
我是否可以坚持生命周期回调,还是必须切换到注入令牌存储的事件侦听器?
/** @ORMHasLifecycleCallbacks() */
class Report {
/** @ORMPrePersist */
public function onPrePersist(LifecycleEventArgs $args)
{
$this->updatedAt = new DateTime();
$this->lastUpdatedBy = ???->getToken()->getUser(); // <-----
}
}
这样做
的好方法是使用 doctrine 事件侦听器:
文件服务.yml
services:
my_report_listener :
class : AppEventListenerReportListner
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();
}
}
}