挂钩和数据库更新后保存 Magento 地址
Magento address save after hook & database update
我对 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);
}
我相信你有点困惑,customer_address_save_after
事件在数据提交到数据库后触发,但是如果你抛出异常或die()
在您的观察者中,因为这会导致数据库 "roll back the save"
customer_address_save_after
$observer->getCustomerAddress()
这是正在提交的地址
Mage::getModel('customer/address')->load($id)
在观察者中,通过传递 $observer->getCustomerAddress()->getEntityId()
的 id 我们可以看到与上面完全相同的数据
但是,如果您使用 customer_address_save_before
$observer->getCustomerAddress()
这是正在提交的地址
$observer->getCustomerAddress()->getEntityId()
如果是新的,将是空白的,如果是编辑的,将具有地址 ID
这确实会给您带来一个问题,如果地址是新地址,您还不知道实体 ID(直到保存之后)。但是,由于 Observer 是作为单例加载的,您可以在观察者上设置一个标志,并在稍后保存后获取地址 ID(它会在那里)。只要您的观察者没有抛出异常或死亡,它就会保存到数据库中!
因此,对于您的查询,您可以使用 customer_address_save_after
(如果您想要客户值,也可以使用 customer_save_after
)。只需确保没有任何异常抛出,即将您的代码包装在 try{}catch{}
中,如果它引发异常则静默失败。
我对 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);
}
我相信你有点困惑,customer_address_save_after
事件在数据提交到数据库后触发,但是如果你抛出异常或die()
在您的观察者中,因为这会导致数据库 "roll back the save"
customer_address_save_after
$observer->getCustomerAddress()
这是正在提交的地址Mage::getModel('customer/address')->load($id)
在观察者中,通过传递$observer->getCustomerAddress()->getEntityId()
的 id 我们可以看到与上面完全相同的数据
但是,如果您使用 customer_address_save_before
$observer->getCustomerAddress()
这是正在提交的地址$observer->getCustomerAddress()->getEntityId()
如果是新的,将是空白的,如果是编辑的,将具有地址 ID
这确实会给您带来一个问题,如果地址是新地址,您还不知道实体 ID(直到保存之后)。但是,由于 Observer 是作为单例加载的,您可以在观察者上设置一个标志,并在稍后保存后获取地址 ID(它会在那里)。只要您的观察者没有抛出异常或死亡,它就会保存到数据库中!
因此,对于您的查询,您可以使用 customer_address_save_after
(如果您想要客户值,也可以使用 customer_save_after
)。只需确保没有任何异常抛出,即将您的代码包装在 try{}catch{}
中,如果它引发异常则静默失败。