Symfony2表单处理程序在持久化之前检查更改



我想在持久化之前检查我的水合实体的变化。

我试着用find将一个新的实体(在bindRequest之后)与DB值一起放入onSuccess,但这个对象具有水合值,而不是DB值!

这就是我尝试过的:

public function onSuccess(TachesDetails $detail) {
    $tache_new = $detail->getTache();
    $tache_old = $this->em->getRepository('NomDuBundle:Taches')->find($tache_new->getId());
    var_dump($tache_old);
    // ...
    $this->em->persist($detail);
    $this->em->persist($detail->getTache());
    $this->em->flush();
}

$tache_old的Var_dump给了我水分值。

编辑:

几个小时后我找到了解决办法。

要解决这个问题,您必须在控制器中创建实体的克隆,并通过formHandler参数发送它。

在onSuccess功能中,您可以这样访问它:

$this->entityCloned

首先,您可以使用prePersist事件来检查发生了什么变化。它比onSuccess更适合。

还有一种更原生的检查更改的方法,使用UnitOfWork对象:

$unitOfWork = $entityManager->getUnitOfWork();
$unitOfWork->computeChangeSets();
$changes = $unitOfWork->getEntityChangeSet($yourEntity);

相关内容

  • 没有找到相关文章

最新更新