为什么注入实体管理器接口会给我一个无法序列化 phpFilesAdapter 错误



我有一个以前从未遇到过的问题,即使我在其他项目中这样做过。我尝试将实体管理器接口注入我的用户实体(以便在配置数据库中获取某些内容(。所以我使用了@PostLoad技术。

/**
* @ORMEntity(repositoryClass="AppRepositoryUserRepository")
* @ORMHasLifecycleCallbacks()
*/
class User implements UserInterface
{
/** @var EntityManagerInterface $em */
private $em;
/**
* @ORMPostLoad
* @ORMPostPersist
*/
public function fetchEntityManager(LifecycleEventArgs $args)
{
$this->setEntityManager($args->getEntityManager());
}
public function setEntityManager($em) {
$this->em=$em;
}
}

我已经在其他项目中完成了此操作,但没有在用户实体中完成此操作,并且它工作得很好。但是现在我收到此错误:

无法序列化 Symfony\Component\Cache\Adapter\PhpFilesAdapter

我认为创建一种可以阻止我在我的实体中注入实体管理器接口的实用程序类会对我有所帮助,但我不知道我应该使用哪种类型的类,也许是服务?

与您的问题并非完全无关:将实体管理器注入实体表示设计错误,并且在Symfony/Doctrine的ORM中并不打算。

导致您的问题的原因是,用户被Symfony的会话管理序列化,当它尝试序列化足够复杂的对象/服务时,它可能无法这样做。建议实现可序列化接口,以仅序列化实际需要的内容(请参阅同一链接(。这将解决您可能遇到的这个问题和其他可能的问题。它还会减小会话的大小,应用程序越大并附加到用户对象,会话的大小可能会越大。由于用户对象无论如何都会在每个请求上加载,因此序列化除上述属性(再次相同的链接(之外的任何内容都是浪费。

我使用Symfony 5.3.9,经过数千小时的尝试,我的工作称为"作曲家更新">

相关内容

最新更新