Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试订购/取消包含多个项目的订单时发生Magento错误_Magento - Fatal编程技术网

尝试订购/取消包含多个项目的订单时发生Magento错误

尝试订购/取消包含多个项目的订单时发生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

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

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我希望这不会显得太不屑一顾,但是你还没有检查所有的东西是否都正常。上面的代码在添加之前检查注册表中是否有东西,以避免出现错误。你的系统由于未知的原因跳过了此检查。找出原因,你就会解决你的问题。耶..就是这样…我安装了一个“低数量通知”扩展正在干扰默认进程。非常感谢。