Я создал класс прослушивателя событий для методов доктрины postPersist, PostUpdate и postRemove.
Мне нужен зарегистрированный идентификатор пользователя в моем классе, я пытался ввести @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'];