«Ключ реестра Mage уже существует» при запуске событий - PullRequest
2 голосов
/ 25 июля 2011

В настоящее время я пытаюсь подключиться к событию "sales_order_save_after", но я постоянно получаю следующую ошибку, когда событие запускается:

Mage registry key "_singleton/Modulename/Orderobserver" already exists

Теперь я проверил, что класс Orderobserver назван правильно и совпадает с вызовом класса в xml, но ошибка все еще происходит. Вызывающий событие xml выглядит так:

<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

Интересно, что при возникновении ошибки в журналах сервера также регистрируется следующая ошибка:

client denied by server configuration: 
/var/www/vhosts/path/to/subdomain/httpdocs/app/etc/local.xml 

Может ли это быть проблемой с разрешениями?

Обновление:

Я посмотрел в системном журнале Magento, и также регистрируется следующая ошибка:

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

Ответы [ 3 ]

9 голосов
/ 25 июля 2011

Во-первых, хотя это, вероятно, и не обязательно, измените это

<class>Modulename/Orderobserver</class>

на

<class>modulename/orderobserver</class>

Условное обозначение псевдонимов классов - все они строчные.

Второепсевдоним класса modulename/orderobserver преобразуется в имя класса

Packagename_Modulename_Model_Orderobserver

Итак, вы указали неверный файл класса.Наконец, поскольку автозагрузчик Magento основан на имени класса, это означает, что ваш файл должен находиться по адресу

app/code/local/Packagename/Modulename/Model/Orderobserver.php
2 голосов
/ 11 мая 2013

Вы получите эту ошибку, если находится внутри

Переместите ее либо в , либо в вне тега , чтобы исправить.

0 голосов
/ 15 апреля 2013
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...