2017-02-01 26 views
1

我有問題關於magento鉤"customer_address_save_after" & "address_save_after"。我想從這個鉤子請求API,從Magento數據庫獲取用戶。不幸的是,在這個時候,在數據庫中是舊數據 - 尚未更新。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); 
} 

回答

1

我相信你弄糊塗了一下,數據被提交到數據庫後customer_address_save_after事件被觸發,但是數據不會「粘」在數據庫中,如果你拋出一個異常,或者您的觀察者內的die() ,因爲這會導致數據庫「回滾保存」

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(直到保存後)。然而,由於觀察者是以單身形式加載的,你可以在你的觀察者上設置一個標誌,並在保存之後獲取地址標識(它會在那裏)。只要你的觀察者不拋出異常或死亡,它就會保存到數據庫中!

因此,對於您的查詢,您可以使用customer_address_save_after(如果您想要客戶值,也有customer_save_after)。只要確保沒有什麼會拋出異常,即將你的代碼包裝在try{}catch{}中,如果它引發異常,它會以靜默方式失敗。