Просмотр изменений данных модели Magento до / после события сохранения? - PullRequest
5 голосов
/ 10 марта 2010

Я пытался сделать что-то, что кажется простым:

  • перехватить событие MODEL_save_after (или MODEL_save_before, если это более уместно)
  • проверьте getData () и getOrigData (), чтобы увидеть, какие изменения внес пользователь

Теперь, в примере модели «customer_address», отредактированной через бэкэнд, я обнаружил, что оба события сохранения запускаются дважды.

В первый раз запускается customer_address_save_before, за которым следует customer_address_save_after. В обоих случаях getOrigData () и getData () идентичны, за исключением того, что getData () имеет новое значение «updated_at» и имеет набор «store_id» (это ошибка?). Таким образом, модель еще не имеет предоставленных данных от пользователя. Оба события перед вводом пользовательских данных или проверкой, поэтому это бесполезно.

срабатывает «customer_address_save_before», а затем «customer_address_save_after» во второй раз. На этот раз (в обоих случаях) getOrigData () пуст, а getData () теперь имеет все отправленные данные от пользователя. Поэтому я не могу сравнивать эти события! Похоже, это после проверки, сохранения, много!

Я также не уверен, почему процесс сохранения происходит дважды?

Используется Magento v1.3.2.4.

Я что-то упустил?

1 Ответ

6 голосов
/ 12 марта 2010

Я завел учетную запись customer_address_save_before и сравнил результаты с тем, что было в базе данных, вот так:

<?php
customer_address_save_before_listener ($event)
{
  $address = $event->getCustomerAddress();

  $database_address = Mage::getModel('customer/address')->load($address->getId());
}
?>

И сравнение getData () возвращается из двух. Было три ошибки, с которыми я столкнулся:

  • Используйте getEntityTypeId () для $ address и проверьте его. Несмотря на перехват «customer_address_save_before», вы также получаете модели OrderAddress, которые отправляются вашему слушателю (мне это кажется неправильным, но это хорошо).
  • Проверка массивов в значениях $ address-> getData (). Например, «улица» возвращается из БД в виде одной строки, в то время как адрес, который передается вашему слушателю, взорван в конце.
  • CustomerAddress, который передается вашему слушателю, имеет 'store_id'. Хотя CustomerAddress не хранит «store_id» и не сохраняет (или загружает) базу данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...