SonataAdminBundle - preUpdate

时间:2014-02-04 15:46:07

标签: symfony doctrine-orm sonata-admin

是否可以检查preUpdate挂钩上的字段是否已更改?我正在寻找类似preUpdate hasChangedField($fieldName)主义功能的内容。有什么想法吗?

2 个答案:

答案 0 :(得分:12)

这个问题与this one

有点类似

您的解决方案只是将旧对象的字段与新对象进行比较,并查看它的不同之处。

例如:

public function preUpdate($newObject)
{
    $em = $this->getModelManager()->getEntityManager($this->getClass());
    $originalObject = $em->getUnitOfWork()->getOriginalEntityData($newObject);

    if ($newObject->getSomeField() !== $originalObject['fieldName']) {
        // Field has been changed
    }
}

答案 1 :(得分:1)

对我而言,最好的方法是在Sonata Admin:

$newField = $this->getForm()->get('field')->getData();
$oldField = $this->getForm()->get('field')->getConfig()->getData();

除非没有选择,否则不应使用工作单元。此外,如果您有一个未映射的字段,则无法通过实体对象访问它。

在正常的Doctrine lyfe循环事件中,最佳选择是Doctrine preupdate event doc