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

时间:2012-08-02 10:32:10

标签: php forms symfony doctrine-orm

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

我尝试使用find将一个新实体放入onSuccess(在bindRequest之后)和DB值,但是这个对象有水合值而不是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

1 个答案:

答案 0 :(得分:1)

首先,您可以使用prePersist event来检查更改的内容。它比onSuccess更合适。

使用UnitOfWork object

还有更原生的方式来检查更改
$unitOfWork = $entityManager->getUnitOfWork();
$unitOfWork->computeChangeSets();
$changes = $unitOfWork->getEntityChangeSet($yourEntity);