在我的symfony 2 / doctrine2应用程序中,我使用实体监听器来捕获异常,并在数据库中尚未记录错误时向自己发送电子邮件。
除非错误是数据库中的失败条目,否则它可以正常工作。在这种情况下,实体管理器已关闭,我不能再在我的异常监听器中使用它。
我无法重置实体管理器,因为它会重用任何实体并抛出新错误(通过...找到新实体)
我不想使用不同的实体经理,因为重新映射每个实体都很痛苦。
我知道如何解决这个问题吗?
Thansk很多!
答案 0 :(得分:1)
我们的项目遇到了同样的问题,因为我们使用数据库假脱机邮件,我们有一个邮件错误报告器。因此,如果发生关闭EM的异常,我们会有一个“补丁”。
我们部分解决了在需要时创建EM的新实例的问题。这不是一个完美的解决方案,但它确实有效。无论如何,这是一次故障转移,而不是正常的操作。
我们将此代码放在我们的电子邮件假脱机程序中:
if(!$this->em->isOpen()) {
$connection = $this->em->getConnection();
while($connection->getTransactionNestingLevel() > 0) {
// clean-up of any open transaction
$connection->rollBack();
}
// new EM
$this->em = $this->em->create($connection, $this->em->getConfiguration());
// this is needed if you use the Blameable extension,
// because at this point of the code, we no longer have a logged user to "blame"
$user = $this->em->getRepository('FacileCbrCoreBundle:User\User')->loadUserByUsername('facile_cbr');
$emailEntity->setCreatedBy($user);
}