如何获取正在更新的对象的持久版本?
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
我正在使用 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