Forms Symfony2 Doctrine2对象的表单验证:在更新时访问以前的值
我已经编写了一个类验证器作为服务,并将条令实体管理器传递给这个验证器。在这一点上,一切正常 但是现在我需要$entry这个未更改的对象,它在表单中被更新了,或者至少是以前的值。我尝试了一些方法,但没有成功: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('
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上发现这些问题: