2011-11-16 56 views
1

我需要比較某人某個特定屬性的對象是否在某人保存時發生了更改。我編寫了一個插件,以便能夠在更新後端對象之前和之後添加一些功能。Pimcore - 在preUpdateObject掛鉤中獲取舊對象狀態

所以,我不知道這是不是按預期工作,或者如果我得到這個錯誤。

我想我會得到狀態之前它是在保存到數據庫:

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 
    } 
} 

任何線索如何才能得到舊的對象狀態之前它是更新?

回答

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();