我已将以下侦听器注册为服务。这将保存登录用户。它完美地工作。保存实体后,用户 ID 位于 createdBy 和 updatedBy 中。好的一个小问题:命令“php应用程序/控制台学说:fixtures:load”抛出错误“调用非对象上的成员函数getUser()。这是可以理解的。只是现在我每次都必须禁用之前的服务?你有其他解决方案吗?
类 UserListener 实现 EventSubscriber { 受保护的$容器; 公共函数 __construct(ContainerInterface $container) { $this->container = $container; } 公共函数 getSubscribedEvents() { 返回数组( 事件::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); } } }