尝试订购/取消包含多个项目的订单时发生Magento错误
Hy 在Magento的onepage签出之后,我收到了以下电子邮件错误消息 ... 付款交易失败。 理由 Mage注册表项“\u singleton/model/observer”已存在 结帐类型 一页 .... 在管理页面上,当尝试删除此oreder时,再次出现相同错误:尝试订购/取消包含多个项目的订单时发生Magento错误,magento,Magento,Hy 在Magento的onepage签出之后,我收到了以下电子邮件错误消息 ... 付款交易失败。 理由 Mage注册表项“\u singleton/model/observer”已存在 结帐类型 一页 .... 在管理页面上,当尝试删除此oreder时,再次出现相同错误: There has been an error processing your request Mage registry key "_singleton/model/observer" already exists
There has been an error processing your request
Mage registry key "_singleton/model/observer" already exists
Trace:
#0 /app/Mage.php(223): Mage::throwException('Mage registry k...')
#1 /app/Mage.php(478): Mage::register('_singleton/mode...', false)
#2 /app/code/core/Mage/Core/Model/App.php(1316): Mage::getSingleton('model/observer')
#3 /app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('cataloginventor...', Array)
#4 /app/code/core/Mage/Core/Model/Abstract.php(466): Mage::dispatchEvent('cataloginventor...', Array)
#5 /app/code/core/Mage/CatalogInventory/Model/Stock/Item.php(787): Mage_Core_Model_Abstract->_afterSave()
#6 /app/code/core/Mage/Core/Model/Abstract.php(319): Mage_CatalogInventory_Model_Stock_Item->_afterSave()
#7 l/app/code/core/Mage/CatalogInventory/Model/Stock.php(210): Mage_Core_Model_Abstract->save()
#8 /app/code/core/Mage/CatalogInventory/Model/Observer.php(809): Mage_CatalogInventory_Model_Stock->backItemQty('542', 1)
#9 /app/code/core/Mage/Core/Model/App.php(1338): Mage_CatalogInventory_Model_Observer->cancelOrderItem(Object(Varien_Event_Observer))
#10 /app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_CatalogInventory_Model_Observer), 'cancelOrderItem', Object(Varien_Event_Observer))
#11 /app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('sales_order_ite...', Array)
……等等
这仅适用于包含多个项目的订单
任何帮助都将不胜感激,特别是因为该网站正在制作中
非常感谢这是一个奇怪的错误--我猜您正在处理app/Mage.php
文件的“核心黑客”/edut(可能是无意的)
如果查看堆栈跟踪,Magento会调用
Mage::getSingleton('model/observer')
这是Magento所说的“实例化模型/观察者
对象,并使其成为单例实例”,如果您不熟悉它们,单例是一个只能实例化一次的“全局”对象。如果您尝试再次实例化一个单例,您将得到原始实例
如果您查看getSingleton
#File: app/Mage.php
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
self::register($registryKey, self::getModel($modelClass, $arguments));
}
return self::registry($registryKey);
}
您可以从导致错误的堆栈跟踪中看到对self::registry
的调用。但是,您还可以看到,Magento通过if(!self::registry($registryKey)){
条件检查以确保注册表项不存在
我猜是有人更改了
app/Mage.php
文件中getSingleton
、或registry
的定义。在sock Magento系统中,不可能收到您在此处发布的确切错误。让我在Alan的回答中添加一点Magento的“解剖”:
从错误日志中:
#10 /app/code/core/Mage/Core/Model/App.php(1317): `Mage_Core_Model_App->_callObserverMethod(Object(Mage_CatalogInventory_Model_Observer), 'cancelOrderItem', Object(Varien_Event_Observer))
类别:Mage\u目录库存\u模型\u观察者
型号:编目清单/观察员
方法:cancelOrderItem
这意味着#2应该是:
#2 /app/code/core/Mage/Core/Model/App.php(1316): Mage::getSingleton('cataloginventory/observer')
但你有:
#2 /app/code/core/Mage/Core/Model/App.php(1316): Mage::getSingleton('model/observer')
失败原因:
1) 当Magento尝试执行Mage::getSingleton('model/observer')时,它会根据Alan的答案调用getSingleton()函数
2) 注册表没有“\u singleton/model/observer”,因此它尝试注册它:
self::register($registryKey, self::getModel($modelClass, $arguments));
3) 它调用self::getModel('model/observer',array())进行注册,该方法失败,因为您没有这样的模型
同样,在一个xml配置文件中有“model/observer”模型,但Magento找不到使用此模型的物理文件
怎么办?
这是在“sales\u order\u item\u cancel”事件中发生的,因此请尝试在第三方扩展文件夹的config.xml文件中查找此字符串
如果在其中一个config.xml中,您会发现如下内容:
...
<events>
...
<sales_order_item_cancel>
<observers>
<inventory>
<class>model/observer</class>
<method>cancelOrderItem</method>
</inventory>
</observers>
</sales_order_item_cancel>
...
</events>
...
。。。
...
模型/观察员
取消订单项
...
...
只需评论
部分。
如果您想让它工作,请在
model/observer
部分设置正确的值。Hello Allen。谢谢您的回答,但不幸的是,这不是我问题的解决方案。我已经仔细检查了getSingleton方法,一切正常。我仍然没有主意,所以如果您有其他解决方案,请与我们分享。谢谢you@user2110973我希望这不会显得太不屑一顾,但是你还没有检查所有的东西是否都正常。上面的代码在添加之前检查注册表中是否有东西,以避免出现错误。你的系统由于未知的原因跳过了此检查。找出原因,你就会解决你的问题。耶..就是这样…我安装了一个“低数量通知”扩展正在干扰默认进程。非常感谢。