在我的插件的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');
}