我已经为教义的postPersist,PostUpdate和postRemove方法创建了一个事件监听器类。Symfony2在教义事件监听器中获取登录用户
我需要登录的用户ID在我的课,我都试过注射@security.context
,@security.token_storage
和@session
我得到了循环引用错误,即使我已经试过注射@service_container
和使用container->get()
我得到了同样的循环引用错误。
ServiceCircularReferenceException:为>服务 “doctrine.orm.default_entity_manager” 检测的循环引用
我在serviec.yml代码的代码是这样
my.listener:
class: \projectCreateEventListener
arguments: ["@service_container"]
tags:
- { name: doctrine.event_listener, event: postPersist }
- { name: doctrine.event_listener, event: postUpdate }
- { name: doctrine.event_listener, event: postRemove }
我的事件监听器类就像
class myListener
{
private $container;
public function
__construct(ContainerInterface $container)
{
$this->container = $container;
}
public function prePersist(LifeCycleEventArgs $args)
{
$entity = $args->getEntity();
//Circular reference error
$user = $this->container->get('security.context')-
>getToken()->getUser();
//getToken() is always null
//Circular reference error
$user = $this->container->get('security.token_storage')-
>getToken()->getUser();
//getToken() is always null
//Circular reference error
$userId = $this->container->get('auth.user')-
>getIdentity()['id'];
}
}
尽管我正在登录我的代码中的用户信息在$this->persist()
之前$this->container->get('auth.user')->getIdentity()['id'];
[在Doctrine EventListener中获取用户]的可能重复(http://stackoverflow.com/questions/40087840/get-user-in-a-doctrine-eventlistener) – LBA
那么,您使用什么版本的Symfony,因为安全性.context早就消失了。我怀疑你还有其他的事情发生。将一个教义听众直接绑定到Symfony可能是最好的方法。考虑使用Symfony事件分派器来处理这类事情。 – Cerad