首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发事件时"Mage注册表项已存在“

触发事件时"Mage注册表项已存在“
EN

Stack Overflow用户
提问于 2011-07-25 20:23:40
回答 3查看 15.8K关注 0票数 2

我目前正在尝试连接到"sales_order_save_after“事件,但当该事件被触发时,我经常收到以下错误:

代码语言:javascript
复制
Mage registry key "_singleton/Modulename/Orderobserver" already exists

现在,我已经检查了Orderobserver类的名称是否正确,并且与xml中对该类的调用是否匹配,但错误仍然存在。调用事件的xml看起来是这样的:

代码语言:javascript
复制
<events>
    <sales_order_save_after>
        <observers>
            <modulename>
                <type>singleton</type>
                <class>Modulename/Orderobserver</class>
                <method>generateOrderFile</method>
            </modulename>
        </observers>
    </sales_order_save_after>
  </events>

这个类被命名为Companyname_Modulename_Model_Modulename_Orderobserver

类文件的命名和位置如下:app/code/local/Companyname/Modulename/Model/Modulename/Orderobserver.php

有趣的是,当错误发生时,服务器日志中也会记录以下错误:

代码语言:javascript
复制
client denied by server configuration: 
/var/www/vhosts/path/to/subdomain/httpdocs/app/etc/local.xml 

这可能是权限问题吗?

更新:

我查看了Magento系统日志,也记录了以下错误:

代码语言:javascript
复制
Failed opening 'Mage/Retailpro/Model/Orderobserver.php' for inclusion (include_path='/var/www/path/to/subdomain/httpdocs/app/code/local:/var/www/path/to/subdomain/httpdocs/app/code/community:/var/www/path/to/subdomain/httpdocs/app/code/core:/var/www/path/to/subdomain/httpdocs/lib:.:')  in /var/www/path/to/subdomain/httpdocs/lib/Varien/Autoload.php on line 93
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-25 23:18:11

首先,尽管这可能不是必然的,但还是要改变这个

代码语言:javascript
复制
<class>Modulename/Orderobserver</class>

代码语言:javascript
复制
<class>modulename/orderobserver</class>

类别名的惯例是它们都是小写的。

其次,类别名modulename/orderobserver转换为一个类名

代码语言:javascript
复制
Packagename_Modulename_Model_Orderobserver

因此,您对类文件的命名是错误的。最后,由于Magento的自动加载器是基于类名的,这意味着您的文件需要位于

代码语言:javascript
复制
app/code/local/Packagename/Modulename/Model/Orderobserver.php
票数 9
EN

Stack Overflow用户

发布于 2013-05-11 07:18:41

如果< events >在< global >内,您将收到此错误

将其移至< >< >标记之外的<>或< adminhtml >< event >,以进行修复。

票数 2
EN

Stack Overflow用户

发布于 2013-04-15 16:19:37

代码语言:javascript
复制
<global>
    <models>
        <newitems>
            <class>Microtron_Newitems_Model</class>
            <resourceModel>newitems_mysql4</resourceModel>
        </newitems>
        <newitems_mysql4>
            <class>Microtron_Newitems_Model_Mysql4</class>
            <entities>        
                <newitems>
                    <table>newitems</table>
                </newitems>
            </entities>
        </newitems_mysql4>
    </models>
    <resources>
        <newitems_setup>
            <setup>
                <module>Microtron_Newitems</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </newitems_setup>
        <newitems_write>
            <connection>
                <use>core_write</use>
            </connection>
        </newitems_write>
        <newitems_read>
            <connection>
                <use>core_read</use>
            </connection>
        </newitems_read>
    </resources>
    <events>     
        <catalog_product_save_after>      
            <observers>     
                <newitems>     
                    <type>singleton</type>  
                    <class>newitems/observer</class>   
                    <method>catalog_product_save</method>  
                </newitems> 
            </observers>  
        </catalog_product_save_after> 
    </events>
</global>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6816058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档