好的,我有一个观察者正在观察controller_action_postdispatch_customer_account_createpost
动作。我的问题是,在方法中我尝试执行以下操作:
public function customerSaveAfter($observer)
{
/** @var Mage_Customer_Model_Customer $customer */
$customer = $observer->getEvent()->getCustomer();
}
无论我做什么,$ customer都是NULL。还有另一个在此之前调用的扩展,它以完全相同的方式使用该方法并提供给客户。请帮忙。
答案 0 :(得分:2)
客户对象为空,因为controller_action_postdispatch_customer_account_createpost
事件是控制器操作事件,与客户对象无关。该事件在以下代码中发布
#File: app/code/core/Mage/Core/Controller/Varien/Action.php
public function postDispatch()
{
if ($this->getFlag('', self::FLAG_NO_POST_DISPATCH)) {
return;
}
Mage::dispatchEvent(
'controller_action_postdispatch_'.$this->getFullActionName(),
array('controller_action'=>$this)
);
Mage::dispatchEvent(
'controller_action_postdispatch_'.$this->getRequest()->getRouteName(),
array('controller_action'=>$this)
);
Mage::dispatchEvent('controller_action_postdispatch', array('controller_action'=>$this));
}
具体来说,
Mage::dispatchEvent(
'controller_action_postdispatch_'.$this->getRequest()->getRouteName(),
array('controller_action'=>$this)
);
位。 ($this->getRequest()->getRouteName()
返回customer_account_createpost
)。注意
array('controller_action'=>$this)
传递给事件调度 - 这意味着您可以使用以下
从观察者访问控制器对象$observer->getControllerAction();
$observer->getData('controller_action');
您还可以使用
获取带有观察者的数据键变量列表var_dump(
array_keys($observer->getData())
);
“其他扩展”(我假设你指的是另一个扩展的观察者对象)可能正在侦听一个不同的事件,一个将customer
对象传递给事件的事件。例如,请考虑customer_login
事件。
#File: app/code/core/Customer/Model/Session.php
public function setCustomerAsLoggedIn($customer)
{
$this->setCustomer($customer);
Mage::dispatchEvent('customer_login', array('customer'=>$customer));
return $this;
}
此处事件派发包括客户对象
array('customer'=>$customer)
这意味着客户将在您的观察者中可用。