mage注册表项"_singleton /"已经存在

Sys*_*ect 1 magento

我知道有很多帖子都有这个问题,但我猜他们每个都有不同的根源(至少从我检查的内容 - 没有帮助我).

我试图在点击用户的按钮时触发事件,但是我在浏览器警报中得到了上面提到的异常Mage registry key "_singleton/" already exists.

config.xml的一部分:

.....
     <models>
        <packagecustomernumber>
            <class>Package_CustomerNumber_Model</class>
        </packagecustomernumber>
    </models>

</global>
<frontend>
        <events>
            <checkout_type_onepage_save_order>
                <observers>
                    <type>singleton</type>
                    <class>packageName/customernumber/observer</class>
                    <method>setCustomerNumber</method>
                </observers>
            </checkout_type_onepage_save_order>
        </events>
    </frontend>
Run Code Online (Sandbox Code Playgroud)

班级本身:

class Package_CustomerNumber_Model_Observer
{
    public function setCutomerNumber($observer)
    {
        die('setCutomerNumber');
    }
}
Run Code Online (Sandbox Code Playgroud)

应该触发甚至检查/保存订单的按钮,因此事件应该是正确的.

有什么建议 ?

Ala*_*orm 8

弹出的第一件事就是这个

<class>packageName/customernumber/observer</class>
Run Code Online (Sandbox Code Playgroud)

那是无效的.这是您告诉Magento用于观察者的类的节点.因此,<class/>节点应该是观察者的完整PHP类名

<class>Package_CustomerNumber_Model_Observer</class>
Run Code Online (Sandbox Code Playgroud)

或者模型的类别名

<class>packagecustomernumber/observer</class>
Run Code Online (Sandbox Code Playgroud)

此外,在运行观察者之前,确保可以实例化模型类是有帮助的.尝试在Magento加载的环境中运行以下代码(脚本,控制器操作,phtml模板等)

$model = new Package_CustomerNumber_Model_Observer;
var_dump(get_class($model));

$model = Mage::getModel('packagecustomernumber/observer');
var_dump(get_class($model));
Run Code Online (Sandbox Code Playgroud)

如果你无法实例化该类,那么Magento也将无法实现(并且在执行某些步骤以触发您的观察者之前,更容易进行测试).