【发布时间】:2014-05-09 15:58:22
【问题描述】:
我有以下 Magento 观察者,它在执行“checkout_controller_onepage_save_shipping_method”时处于活动状态,例如当用户结账并点击“运输方式”上的提交时
我的观察者函数如下所示:
public function afterShippingMethod($observer)
{
$org_id = Mage::getSingleton('customer/session')->getCustomerOrganisationId(); // always a number eg. 12345
Mage::getSingleton('customer/session')->getCustomer()->setOrganisationId($org_id)->save();
}
这个函数在正确的时间运行,但给了我一个 Magento 错误:
There has been an error processing your request
Customer email is required
显然错误中需要电子邮件地址,但由于客户已在“帐单信息”阶段输入了电子邮件地址,我不明白为什么会得到这个?
这是堆栈跟踪:
Trace:
#0 /vagrant/site.com/public_html/app/code/core/Mage/Customer/Model/Resource/Customer.php(76): Mage::exception('Mage_Customer', 'Customer email ...')
#1 /vagrant/site.com/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(1122): Mage_Customer_Model_Resource_Customer->_beforeSave(Object(Mage_Customer_Model_Customer))
#2 /vagrant/site.com/public_html/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Eav_Model_Entity_Abstract->save(Object(Mage_Customer_Model_Customer))
#3 /vagrant/site.com/public_html/app/code/local/site/Raptor/Model/Raptor/Observer.php(25): Mage_Core_Model_Abstract->save()
#4 /vagrant/site.com/public_html/app/code/core/Mage/Core/Model/App.php(1338): site_Raptor_Model_Raptor_Observer->afterShippingMethod(Object(Varien_Event_Observer))
#5 /vagrant/site.com/public_html/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(site_Raptor_Model_Raptor_Observer), 'afterShippingMe...', Object(Varien_Event_Observer))
#6 /vagrant/site.com/public_html/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('checkout_contro...', Array)
#7 /vagrant/site.com/public_html/app/code/core/Mage/Checkout/controllers/OnepageController.php(389): Mage::dispatchEvent('checkout_contro...', Array)
#8 /vagrant/site.com/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Checkout_OnepageController->saveShippingMethodAction()
#9 /vagrant/site.com/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('saveShippingMet...')
#10 /vagrant/site.com/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#11 /vagrant/site.com/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#12 /vagrant/site.com/public_html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#13 /vagrant/site.com/public_html/en-us/index.php(87): Mage::run('en_us', 'store')
堆栈跟踪中的实际错误是 Customer\Model\Resource\Customer.php 中的以下内容
if (!$customer->getEmail()) {
throw Mage::exception('Mage_Customer', Mage::helper('customer')->__('Customer email is required'));
}
这个错误的一切都很自我解释,但我不知道如何将组织 ID 保存到这个客户对象 - 有什么想法吗?
任何想法为什么会发生这种情况以及如何修复错误?
【问题讨论】:
-
我认为您不必保存()给客户。你只需要设置你的 id。让我知道它是否有效
-
谢谢,虽然这在这种情况下没有帮助,但我显然做错了什么,只是无法理解
标签: magento frameworks magento-1.7 observers