Symfony - 表单事件 - 获取新旧数据

时间:2016-05-04 08:34:53

标签: php symfony

我有一个Post实体和PostType

发布实体包含字段$requireModeration,这意味着必须先检查此帖子并在发布之前批准该帖子。

当我编辑帖子时,我想比较旧帖子值和新帖子值。如果值已更改,我还想将requireModeration标志更改为true。

我可以通过表格活动来完成吗? 像这样:

public function postSubmit(FormEvent $event)
{
    $newPost = $event->getData();
    $newContent = $post->getContent(); // return new contant of post
    $oldPost = ... // here I want to get old post
    $oldContent = $oldPost->getContent();

    if($newContent != $oldContent) {
        // ...
    }
}

但不幸的是,我只能获得新的,只是通过FormEvent对象发送数据。

2 个答案:

答案 0 :(得分:1)

您应该使用Doctrine的生命周期事件和UnitOfWork来代替Form事件(我假设您在项目中使用Doctrine)。

preUpdate侦听器添加到Post实体,并执行以下操作:

$uow = $em->getUnitOfWork();
$changeset = $uow->getEntityChangeSet($entity);

$changeset变量中,您将在当前请求期间使用旧值和新值在$entity中更改字段列表。

答案 1 :(得分:1)

public function postSubmit(FormEvent $event)
{
    $newPost = $event->getData();
    $newContent = $newPost->getContent();
    $uow = $this->em->getUnitOfWork();
    $oldPost = $uow->getOriginalEntityData($post);
    $oldContent = $OriginalEntityData["content"];

    if($newContent != $oldContent) {
        // ...
    }
}