Forms Symfony2 Doctrine2对象的表单验证:在更新时访问以前的值

Forms Symfony2 Doctrine2对象的表单验证:在更新时访问以前的值,forms,validation,symfony,doctrine-orm,Forms,Validation,Symfony,Doctrine Orm,我已经编写了一个类验证器作为服务,并将条令实体管理器传递给这个验证器。在这一点上,一切正常 但是现在我需要$entry这个未更改的对象,它在表单中被更新了,或者至少是以前的值。我尝试了一些方法,但没有成功: public function isValid($entry, Constraint $constraint) { $oldEntry = $this->em->getRepository('SomeBundle:Entry')->findOneBy(array('

我已经编写了一个类验证器作为服务,并将条令实体管理器传递给这个验证器。在这一点上,一切正常

但是现在我需要$entry这个未更改的对象,它在表单中被更新了,或者至少是以前的值。我尝试了一些方法,但没有成功:

public function isValid($entry, Constraint $constraint)
{
    $oldEntry = $this->em->getRepository('SomeBundle:Entry')->findOneBy(array('id' => $entry->getId()));
条令获取与预期相同的(更改的)对象。但尝试刷新对象将重置对象的两个版本:

    $newEntry = clone $entry;
    $this->em->detach($newEntry);
    $this->em->refresh($entry);

    $hoursOfOldEntry = $entry->calculateHours();

    $this->em->merge($newEntry);
另一个选项是将对象的值保存为数组,刷新对象并在处理原始值后重新分配保存的值。但这似乎不是最好的方式,尤其是在关系众多的情况下。我不习惯在验证器中触摸对象,我只需要前面的值

另一种方法可以是使用
条令\ORM\UnitOfWork#重新计算SingleEntityChangeSet(条令\ORM\ClassMetadata$meta$entity)
。但我认为在验证器中使用内部条令方法不是一个好主意


那么如何在类验证器中获取原始对象或更改集呢?

这不会获取原始实体,但应该获取原始字段的键/值数组:

$uow = $em->getUnitOfWork();
$originalData = $uow->getOriginalEntityData($entry);

这不会得到原始实体,但应该得到原始字段的键/值数组:

$uow = $em->getUnitOfWork();
$originalData = $uow->getOriginalEntityData($entry);

我有一个类似的问题:获取实体的更改值,我在SO上发现这些问题:我有一个类似的问题:获取实体的更改值,我在SO上发现这些问题: