以下のリスナーをサービスとして登録しました。これにより、ログインしているユーザーが保存されます。それは完全に機能します。エンティティを保存した後、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); } } }