如何在plugin';s Observer.php?
在我的插件的如何在plugin';s Observer.php?,php,magento,Php,Magento,在我的插件的Model/Observer.php中,我有两个函数,它们对应于两个不同的事件,但我想将一个变量从第一个函数传递到下一个函数。我试过这样的方法: class ContactologyProduct_LogProductUpdate_Model_Observer { (...) public function beforeAddressSave(Varien_Event_Observer $observer) { $contactologyClientIdBeforeEdit
Model/Observer.php
中,我有两个函数,它们对应于两个不同的事件,但我想将一个变量从第一个函数传递到下一个函数。我试过这样的方法:
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
在beforeaddressave()
函数中保存$contactologyclientibeforeedit
的正确方法是什么,以便以后在afterAddressSave()中访问它
您应该使用$observer而不是$this,但首先您应该查看事件的创建位置,因为您可以使用如下内容:
$contactologyClientIdBeforeEdit = $observer->getEvent()->getCustomerAddress();
然后,您可以在类中实现setData和getData,或者让类扩展Varien_对象类。
因此,我认为你会:
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');
}
在setData()
中使用$observer
而不是$this
不确定您在这里做什么,但我没有看到setData
方法,我怀疑您忽略了对象是通过引用传递的事实。如果函数A接收到一个对象,并将其传递给函数B,后者编辑同一对象,则函数A中的对象也会被修改$this->getCustomerAddress()
正常-无需将其更改为$observer->getCustomerAddress()
。无论如何,$this->getData('contactologyclientibeforedit')
(我也尝试了observer
而不是this
)仍然只在第一个函数(设置它的地方)中返回值,在第二个函数中返回NULL
。我用var\u dump()选中了$this
)
,它似乎指的是两个不同的观察者,在地址编辑之前:#132
,在地址编辑之后:#368
…除非您在类中做其他事情,$这是对ContactologyProduct\u LogProductUpdate\u Model\u观察者的引用。如果更改代码以扩展Varien_对象,它将可以访问setData和getData等方法。否则,我看不到如何定义$this->getCustomerAddress()
,并返回一些内容。无论如何,您可以使用用户Mage::register($key,$value)
其中,$key
可以是“contactologyClientIdBeforeEdit”和$value
来自$observer->getCustomerAddress()
的数据,而不是setData(),对于getData(),可以使用Mage::registry($key)
是的,getCustomerAddress()
是我自己的函数。Mage注册表的工作原理与set/get Data
-在第一个函数中返回值,但在第二个函数中返回NULL
。var_dump(Mage::registry(“contactologyclientidbeforedit”)代码>
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');
}