如何在插件's Observer.php中传递变量


How to pass variable around functions within plugin's Observer.php?

在我的插件的Model/Observer.php我有2个函数对应于2个不同的事件,但我想传递一个变量从第一个函数到下一个。我尝试这样做:

class ContactologyProduct_LogProductUpdate_Model_Observer
{
(...)
public function beforeAddressSave(Varien_Event_Observer $observer) {
  $contactologyClientIdBeforeEdit = $this->getCustomerAddress();
  $this->setData('contactologyClientIdBeforeEdit', $contactologyClientIdBeforeEdit);  // won't work
}
public function afterAddressSave(Varien_Event_Observer $observer) {
  $contactologyClientIdAfterEdit = $this->getCustomerAddress();
  $contactologyClientIdBeforeEdit = $this->getData('contactologyClientIdBeforeEdit');  // won't work
  var_dump($contactologyClientIdBeforeEdit); // won't work
  var_dump($contactologyClientIdAfterEdit);
}
}

setData()不工作,我得到错误:

Call to a member function setData() on a non-object

如何将$contactologyClientIdBeforeEdit保存在beforeAddressSave()函数中,以便以后在afterAddressSave()中访问?

public function beforeAddressSave(Varien_Event_Observer $observer) {
   $contactologyClientIdBeforeEdit = $this->getCustomerAddress();
   $this->setData('contactologyClientIdBeforeEdit', $contactologyClientIdBeforeEdit);  // won't work
}

你应该使用$observer而不是$this,但首先你应该看看事件是在哪里创建的,因为你可以像这样:

$contactologyClientIdBeforeEdit = $observer->getEvent()->getCustomerAddress();

然后你可以在你的类中实现setData和getData,或者让你的类扩展Varien_Object类。所以,我想你会有:

class ContactologyProduct_LogProductUpdate_Model_Observer extends Varien_Object {
public function beforeAddressSave(Varien_Event_Observer $observer) {
   $contactologyClientIdBeforeEdit = $observer->getCustomerAddress(); //or $observer->getEvent()->getCustomerAddress() look how the event data is set.
   $this->setData('contactologyClientIdBeforeEdit', $contactologyClientIdBeforeEdit);
}
public function afterAddressSave(Varien_Event_Observer $observer) {
   $contactologyClientIdAfterEdit = $observer->getCustomerAddress();
   $contactologyClientIdBeforeEdit = $this->getData('contactologyClientIdBeforeEdit');
}