在保存事件之前/之后查看Magento模型数据更改?

Kin*_*kaL 5 php magento

我一直在尝试做一些看起来应该很简单的事情:

  • 挂钩一个MODEL_save_after事件(如果更合适的话,还是MODEL_save_before)
  • 检查getData()vs getOrigData()以查看用户所做的更改

现在,在通过后端编辑的'customer_address'模型的示例中,我发现两个保存事件都被触发了两次.

第一次触发'customer_address_save_before',然后是'customer_address_save_after'.在这两种情况下,getOrigData()和getData()都是相同的,除了getData()有一个新的'updated_at'值,并且设置了'store_id'(这是一个bug吗?).因此,该模型还没有来自用户的提交数据.这些事件都在输入用户数据或验证之前,因此没有用.

触发'customer_address_save_before',然后再触发'customer_address_save_after'.这次(在两种情况下),getOrigData()都是空的,而getData()现在拥有来自用户的所有提交数据.所以我无法比较这些事件!看来这是经过验证,保存,很多!

我也不确定为什么保存过程会出现两次?

Magento v1.3.2.4正在使用中.

我错过了什么吗?

Kin*_*kaL 6

我结束了对customer_address_save_before的挂钩,并将结果与​​数据库中的内容进行比较,如下所示:

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

  $database_address = Mage::getModel('customer/address')->load($address->getId());
}
?>
Run Code Online (Sandbox Code Playgroud)

并比较两者的getData()返回值.我遇到了三个问题:

  • 在$ address上使用getEntityTypeId()并检查它.尽管挂钩'customer_address_save_before',你也会将OrderAddress模型发送给你的监听器(这对我来说似乎不对,但是好啊).
  • 检查$ address-> getData()值中的数组.例如,"street"作为单个字符串从DB返回,而传递侦听器的地址在终结符号上展开.
  • 传入侦听器的CustomerAddress具有"store_id".即使CustomerAddress不存储'store_id',也不会保存(或从中加载)数据库.