Просмотр изменения данных модели Magento на прежде/после того, как сохраняет событие?

Это должно быть просто:

  • Рычаг a 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.

5
задан user4157124 1 September 2019 в 12:00
поделиться

1 ответ

В итоге я подключил 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 и не сохраняется (или не загружается из) базы данных.
6
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: