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

标签 php symfony

我有一个 Post 实体和 PostType

帖子实体有字段 $requireModeration 这意味着必须有人检查并批准该帖子才能发布。

当我编辑帖子时,我想比较旧帖子值(value)和新帖子值(value)。如果值发生变化,我还想将 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 对象获取刚刚发送的新数据。

最佳答案

你应该使用 Doctrine 的生命周期事件和 UnitOfWork 而不是 Form 事件(我假设你在你的项目中使用 Doctrine)。

preUpdate 监听器添加到您的 Post 实体并执行以下操作:

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

$changeset 变量中,您将拥有在当前请求期间在 $entity 中更改的字段列表及其旧值和新值。

关于php - Symfony - 表单事件 - 获取新旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022467/

相关文章:

php - 使用 "instanceof"的正确方法是什么?

php - 无法使用 : php bin/console doctrine:database:create

php - 在没有 crontab 的情况下运行 php 脚本

Phpunit 在 linux 的 windows 子系统上无法正常运行

javascript eval on php json_encode 输出 - 安全问题

php - Symfony3如何在数据库中存储用户角色

php - Symfony 3.1 和 OneUpUploaderBundle + Blueimp = UploadListener 未被调用

javascript - 如何动态初始化select2

javascript 正则表达式从 config.php 字符串中提取路径

php - 如何在 Symfony 2 中获取当前路线?