Pimcore - получить старое состояние объекта в хуке preUpdateObject - PullRequest
1 голос
/ 16 ноября 2011

Мне нужно сравнить, изменилось ли определенное свойство моего объекта, когда кто-то его сохраняет. Я написал плагин, чтобы иметь возможность добавлять некоторые функции до и после обновления объекта в бэкэнде.

Итак, я не знаю, работает ли это не так, как ожидалось, или я ошибаюсь.

Я думал, что получу состояние, прежде чем оно будет сохранено в базе данных в:

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 голосов
/ 02 декабря 2011

Похоже, эта функция не работает должным образом.Я отправил отчет об ошибке: 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();     
...