为什么?
在Magento结帐后,我收到了以下电子邮件错误消息.付款交易失败。原因是Mage注册表项“_singleton/model/观测者”已经存在签出类型.
在管理页面上,当尝试删除这个oreder时,同样的错误,同样是:
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)..and等
这种情况只发生在有多个项目的订单上。
任何帮助都将受到感谢,特别是因为该网站现在正在生产。
非常感谢
发布于 2014-12-13 19:16:50
让我在阿兰的回答中加上一点马根托的“解剖”:
从错误日志中:
#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_CatalogInventory_Model_Observer
模式:编目清单/观察员
方法: 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(“模型/观察者”)时,它将从getSingleton()函数中调用。
2)注册表没有“_singleton/model/观察者”,因此它试图注册它:
self::register($registryKey, self::getModel($modelClass, $arguments));3)它调用self::getModel(‘model /观察者’,array())进行注册,这个方法失败了,因为您没有这样的模型。
同样,在xml配置文件中有“模型/观察者”模型,但是Magento无法找到该模型的物理文件。
该怎么办呢?这是在'sales_order_item_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>
...只需评论<sales_order_item_cancel>部分。如果要使其正常工作,请在<class>model/observer</class>部分中设置正确的值。
发布于 2014-12-13 17:35:51
这是一个奇怪的错误--我猜您正在处理的是/edut文件的“核心黑客”(可能是无意中的)。
如果您查看堆栈跟踪,Magento调用
Mage::getSingleton('model/observer')这是Magento所说的“实例化model/observer对象,并使其成为单个实例”的方法,如果您不熟悉它们,那么单例就是一个只能实例化一次的“全局”对象。如果再次尝试实例化单个实例,则会得到原始实例。
如果您查看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 通过条件检查注册表项,以确保注册表项不存在。
我猜是有人更改了getSingleton的定义,或者是registry或register在app/Mage.php文件中的定义。在sock Magento系统中,不可能接收到您在这里发布的准确错误。
https://stackoverflow.com/questions/27459969
复制相似问题