以下のリスナーをサービスとして登録しました。これにより、ログインしているユーザーが保存されます。それは完全に機能します。エンティティを保存した後、user-id は createdBy と updatedBy にあります。ちょっとした問題: コマンド "php app / console doctrine: Fixtures: load" がエラー "Call to a member function getUser () on a non-object. それはちょっと理解できます。今だけ毎回無効にする必要があります別の解決策はありますか?
クラス UserListener は EventSubscriber を実装します
{
保護された $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
パブリック関数 getSubscribeEvents()
{
配列を返します(
イベント::prePersist、
イベント::更新前
);
}
パブリック関数 prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof Post) {
$user = $this->container->get('security.context')->getToken()->getUser();
if (!is_object($user) || !$user instanceof User) {
新しい AccessDeniedException() をスローします。
}
$entity->setCreatedBy($user);
$entity->setUpdatedBy($user);
}
}
/**
* @param PreUpdateEventArgs $args
*/
パブリック関数 preUpdate(PreUpdateEventArgs $args)
{
$entity = $args->getEntity();
$em = $args->getEntityManager();
if ($entity instanceof Post) {
$user = $this->container->get('security.context')->getToken()->getUser();
if (!is_object($user) || !$user instanceof User) {
新しい AccessDeniedException() をスローします。
}
$entity->setUpdatedBy($user);
$uow = $em->getUnitOfWork();
$meta = $em->getClassMetadata(get_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
}
}
}