我有一个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对象发送数据。
答案 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) {
// ...
}
}