SonataAdminBundle - check changes in `preUpdate` hook

后端 未结 2 1909
盖世英雄少女心
盖世英雄少女心 2021-01-12 08:11

Is it possible to check if field was changed on preUpdate hook? I\'m looking for something like preUpdate hasChangedField($fieldName) Doctrine functionality. An

相关标签:
2条回答
  • 2021-01-12 08:54

    This question is a bit similar to this one

    Your solution is just to compare the field of the old object with the new one and see where it differs.

    So for example:

    public function preUpdate($newObject)
    {
        $em = $this->getModelManager()->getEntityManager($this->getClass());
        $originalObject = $em->getUnitOfWork()->getOriginalEntityData($newObject);
    
        if ($newObject->getSomeField() !== $originalObject['fieldName']) {
            // Field has been changed
        }
    }
    
    0 讨论(0)
  • 2021-01-12 09:11

    For me the best approach is this in Sonata Admin:

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

    You shouldn't use unit of work unless there is no option. Also, if you have a not mapped field, you can't access it by entity object.

    In a normal Doctrine lyfe cycle event, the best option is Doctrine preupdate event doc

    0 讨论(0)
提交回复
热议问题