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

时间:2010-03-10 04:55:08

标签: 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正在使用中。

我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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