在preUpdate Sonata Admin Bundle中获取旧数据

时间:2013-04-19 01:40:49

标签: symfony-2.1 sonata-admin

我有一个product实体,它有一个images字段,用于存储产品中的图像名称,但图像名称取决于唯一的part_number字段,因此如果用户在部件号中出错并且他想编辑它然后我还必须更改图像名称

我尝试了这个,但它不起作用:

// class ProductsAdmin extends Admin

public function preUpdate($product) {

    $old_product = $this->getSubject();

    if ($old_product->getPartNumber() != $product->getPartNumber)
    {
         // change file names
    }

    $this->saveFile($product);
}

我如何获得preUpdate()函数中的原始行?

2 个答案:

答案 0 :(得分:16)

根据官方SonataAdmin谷歌论坛采取的主题: https://groups.google.com/forum/#!topic/sonata-devs/0zML6N13i3U 你需要使用UnitOfWork类: 的 http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.UnitOfWork.html

这样做:

public function preUpdate($object)
{
    $em = $this->getModelManager()->getEntityManager($this->getClass());
    $original = $em->getUnitOfWork()->getOriginalDocumentData($object);
}

因此,您将获得数据库实体的值数组。 例如:要访问您实体的值密码,请执行以下操作:

$password = $original['password'];

这就是全部。 享受:)

答案 1 :(得分:0)

如果您只是在preUpdate函数中执行一个doctrine查询来从数据库中获取产品,那么您将拥有旧对象。然后做比较,你很高兴。