我对magento hook "customer_address_save_after"
& "address_save_after"
。我要从这个钩子请求API,它从Magento数据库获取用户。不幸的是,此时,在数据库中是旧数据 - 尚未更新。
Magento中是否有任何钩子,允许我在数据库更新后发出请求?或者也许是将此钩子中的数据保存到数据库的任何方法?有点像$ customer-> save()?
public function afterAddressSave($observer)
{
$customerAddress = $observer->getCustomerAddress();
$customer = $customerAddress->getCustomer();
if ($customer->getDefaultBillingAddress() && $customer->getDefaultBillingAddress()->getCountryId()) {
Mage::helper('iwsettings')->setStoreId($customer, $customer->getDefaultBillingAddress()->getCountryId());
}
$this->updateTypo3UserData($customer);
}
答案 0 :(得分:1)
我相信你有点困惑,在将数据提交到数据库之后会触发customer_address_save_after
事件,但是如果你抛出异常或{{1},那么数据就不会“粘在”数据库中在你的观察者中,因为这会导致数据库“回滚保存”
die()
customer_address_save_after
这是提交的地址$observer->getCustomerAddress()
在观察者中,通过传递Mage::getModel('customer/address')->load($id)
的ID,我们可以看到与上面完全相同的数据但是,如果您使用$observer->getCustomerAddress()->getEntityId()
customer_address_save_before
这是提交的地址$observer->getCustomerAddress()
将为空白,如果已修改,则会显示地址ID 这确实会让您知道如果地址是新的,您还不知道实体ID(直到保存后)。但是,当Observer作为单例加载时,您可以在观察者上设置一个标志,并在保存后稍后获取地址ID(它将在那里)。只要您的观察者不抛出异常或死亡,它就会保存到数据库中!
因此,对于您的查询,您可以使用$observer->getCustomerAddress()->getEntityId()
(如果您想要客户的价值,还有一个customer_address_save_after
)。只是确保没有抛出异常,即将代码包装在customer_save_after
中,如果它引发异常,则会无声地失败。