php-Magento事件调度/观察/修改调度对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-Magento事件调度/观察/修改调度对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1638字,纯文字阅读大概需要3分钟。
内容图文
我试图解决一个问题,但没有成功.我需要通过Magento API订单信息请求发送一些其他信息.不幸的是,Magento似乎没有与此相关的任何事件,因此我重写了该类并调度了一个事件.当我用新信息修改$result数组时,一切都很好.但是,不好的部分是,修改后的数组从不显示在原始调度代码中.
这是调度:
class Company_Module_Model_Order_Api extends Mage_Sales_Model_Order_Api {
public function info($orderIncrementId) {
$result = parent::info($orderIncrementId);
$order = $this->_initOrder($orderIncrementId);
Mage::dispatchEvent("company_api_order_info_add",
array('result' => &$result, 'order' => &$order));
// - I've tried with and without the ampersand
Mage::log($result['affiliate_text']); // Debugging
return $result;
}
}
这是观察者代码:
class Company_Other_Model_Api
{
public function hookToSetAffiliate ($observer) {
$result = $observer->getResult();
$order = $observer->getOrder();
if ($order->getAffiliateCode()) {
$affiliate = Mage::getModel('affiliates/info')
->load($order->getAffiliateCode());
if (is_object($affiliate))
$result['affiliate_text'] = $affiliate->getCode();
}
Mage::log($result['affiliate_text']); // Shows up here
return $observer;
}
}
}
您有什么想法为什么$result不能正确输入?在该钩子中,它可以正确显示,但是,在发生调度方法的下一行时,“ affiliate_text”不可见.
谢谢,
JMax
解决方法:
我建议您采取与Magento相同的路线.
// Wrap array in an object
$result = new Varien_Object($result);
// Dispatch - No need for & as $result and $order are both objects and passed by ref
Mage::dispatchEvent("company_api_order_info_add", array('result'=>$result, 'order'=>$order));
// Unwrap array from object
$result = $result->getData();
Varien_Object仍将允许数组访问,因此您的侦听器代码根本不需要更改.
内容总结
以上是互联网集市为您收集整理的php-Magento事件调度/观察/修改调度对象全部内容,希望文章能够帮你解决php-Magento事件调度/观察/修改调度对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。