Pimcore - 在preUpdateObject钩子中获取旧的Object状态

时间:2011-11-16 10:56:32

标签: php content-management-system zend-framework pimcore

我需要比较某人保存时我的对象的某个属性是否已更改。我写了一个插件,可以在后端更新对象之前和之后添加一些功能。

所以,我不知道这是不是按预期工作,或者我错了。

我认为在将状态保存到数据库之前我会得到状态:

function preUpdateObject(Object_MyObject $object) {}

中对象的新状态
function postUpdateObject(Object_MyObject $object) {}

但这不起作用:

public function preUpdateObject(Object_MyObject $object) {
   $this->tempOldDate = $object->getUpdate();
}

public function postUpdateObject(Object_MyObject $object){
   if($this->tempOldDate->compareDate($object->getUpdate()) == -1) {
   // do something because a newer date has been entered   
   }
}

任何线索如何在更新之前获取旧对象状态?

1 个答案:

答案 0 :(得分:0)

好像这个功能没有按预期工作。我提交了一份错误报告: http://www.pimcore.org/issues/browse/PIMCORE-1232

我创建了一个可以使用的解决方法。

数据库未更新。所以preUpdateObject是用于获取对象状态的函数是正确的,但是:

检查数据库是否未更新....我想要一个位于表'object_1'

中的对象的日期
// oldDate has the old value
$dbAdapter = Pimcore_Resource_Mysql::get("database");
$dbentry = $dbAdapter->fetchRow(
              $dbAdapter->select()
                        ->from('object_1')
                        ->where('o_id = ?', $object->getId()));     
$oldDate = new Pimcore_Date($dbentry['update']);

使用生成的Object类不起作用,但如果清除缓存

// get's the new date from the editor 
$oldDate = Object_MyObject::getById($object->getId())->getUpdate();
// this also works but don't know if it is safe to delete
// the object from the registry
Zend_Registry::set('object_' . $object->getId(), false);
$oldDate = Object_MyObject::getById($object->getId())->getUpdate();