如何获取正在更新的对象的持久版本?

How to get persisted version of object that is being updated?

我正在使用 TYPO3 v.9.5 开发一个 Extbase 扩展。
在控制器中更新对象时,我想在持久化新对象之前比较新对象和旧对象的一些属性。

我很困惑为什么我只找到新值。
我怎样才能得到仍在数据库中的旧的?

这是我目前正在尝试的代码片段:

<?php

namespace XX\Xxxxxx\Controller;

use XX\Xxxxxx\Domain\Model\Feedback;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
use TYPO3\CMS\Extbase\Annotation\Inject;

class ContactController extends ActionController {
    /**
     * @Inject
     * @var XX\Xxxxxx\Domain\Repository\FeedbackRepository
     */
    protected $feedbackRepository = null;

    public function updateFeedbackAction(Feedback $feedback) {
        $oldFeedback = $this->feedbackRepository->findByUid($feedback->getUid());
        DebuggerUtility::var_dump($feedback->getState());
        // Why does this print the updated values as well? I didn't persist yet...
        DebuggerUtility::var_dump($oldFeedback->getState());
    }
}

可视化:我将其从“测试...”更改为“测试”。

点击保存后,我从 var_dump 中得到以下输出:

但我希望在第二个转储中出现“测试...”。

尝试在动作开始之前获取旧对象并将其保存在全局变量中。例如:

 /**
 * @var Feedback $oldFeedback
 */
protected $oldFeedback = null;

public function initializeUpdateFeedbackAction() {
    // how you get the uid is up to you. This will not throw an exception 
    // if the feedback argument is missing
    $arguments = $this->request->getArguments();
    $feedbackId = $arguments['feedback']['uid'];
    $this->oldFeedback = $this->feedbackRepository->findByUid($feedbackId);
}

然后你可以继续在你的函数上做任何你想做的事情updateFeedbackAction并比较两个状态。

尚未测试,但应该可以使用

这是初始化文档:Initialize