我已經爲教義的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