我已将以下侦听器注册为服务。这将保存登录用户。它完美地工作。保存实体后,用户 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);
}
}
}