Фатальная ошибка: Класс "Вспомогательные данные Mage Rms" не найден в C:\wamp\www\app\Mage.php на линии 546


Я понимаю, что есть вопросы, подобные этому, но пока ни один из ответов ко мне не относится.

Я создаю пользовательский модуль, который работает, за исключением того, что вспомогательный класс не загружается. Я вызываю его с помощью Mage::helper('rms') и получаю

Неустранимая ошибка: класс 'newhope_rms_helper_data' не найден в C:\wamp\www\app\Mage.php в строке 546

Вот конфигурация моего модуля. Наблюдатель правильно запускается после успешного запуска пользователя регистры:

App/code/local/NewHope/RmsUpdate/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>

<config>
    <modules>
        <NewHope_RmsUpdate>
            <version>0.0.1</version>
        </NewHope_RmsUpdate>
    </modules>
    <global>
        <events>
            <customer_register_success>
                <observers>
                    <newhope_rmsupdate>
                        <class>newhope_rmsupdate/observer</class>
                        <method>import_new_customer_to_rms</method>
                        <type>singleton</type>
                    </newhope_rmsupdate>
                </observers>
            </customer_register_success>
        </events>
        <models>
            <newhope_rmsupdate>
                <class>NewHope_RmsUpdate_Model</class>
            </newhope_rmsupdate>
        </models>
        <helpers>
            <rms>
                <class>NewHope_Rms_Helper</class>
            </rms>
        </helpers>
    </global>
</config>

App/code/local/NewHope/RmsUpdate/Helper/Data.php

<?php

class NewHope_Rms_Helper_Data extends Mage_Core_Helper_Abstract
{
    ...
}

App/code/local/NewHope/RmsUpdate/Model/Observer.php

<?php

class NewHope_RmsUpdate_Model_Observer
{
    public function import_new_customer_to_rms(Varien_Event_Observer $observer)
    {
        $customer = $observer->getCustomer();

        //Fatal Error shows up here, when I try to load the rms helper!
        $rms_updated = !!Mage::helper('rms')->CreateRmsUser($customer);

        Mage::log(
            sprintf('%s (%s) registered. RMS Update: %s',
                $customer->getEmail(),
                $customer->getId(),
                $rms_updated ? 'Successful' : 'Failed'),
            null,
            'user-registration.log');
    }
}

У меня есть эти подсказки:

  1. Я экспериментировал с изменением config.xml <rms> тег к чему-то произвольному, что, как я знал, было неправильным, и ошибка все еще оставалась идентичной.
  2. В промежутках между каждой попыткой я вручную удалял папка var/cache, поэтому, хотя вышеуказанные пункты кажутся проблемой кэширования, я думаю, что это не так.
  3. Компиляция уже отключена, проблема не в этом.
Author: Pete Michaud, 2014-09-01

4 answers

Вы настроили свой вспомогательный класс следующим образом.

<helpers>
    <rms>
        <class>NewHope_Rms_Helper</class>
    </rms>
</helpers>

Поэтому, когда вы запрашиваете вспомогательный класс с помощью Mage::helper('rms'), Magento отследит ваш модуль, поскольку он определяет имя псевдонима помощника rms, а затем выберет имя класса, связанное с ним. Так что в данном случае у Magento есть NewHope_Rms_Helper. На следующем шаге magento проверяет, запрашивали ли вы конкретное имя вспомогательного класса. Например, если вам был запрошен вспомогательный класс, такой как Mage::helper(rms/example), то magento добавит эту часть example в класс, который уже выбран из вашей конфигурации и, таким образом, завершает процесс генерации класса (здесь класс будет NewHope_Rms_Helper_Example). Однако, если мы не указали какое-либо конкретное имя помощника, то по умолчанию Magento принимает это имя класса как Data. Таким образом, в вашем случае Magento формирует окончательный вспомогательный класс как NewHope_Rms_Helper_Data.

Имя класса указывает на местоположение, в котором должен быть определен этот класс. Это означает, что Magento теперь будет искать вашего помощника в app/code/local/NewHope/Rms/Helper/Data.php. Если его там нет, он будет загляните в app/code/community/NewHope/Rms/Helper/Data.php. Затем снова в каталоге app/code/core, а затем снова в каталоге lib. В вашем случае Magento не может найти вспомогательный класс. Так что в результате он выдаст ошибку.(Обратите внимание, что сгенерированное местоположение NewHope\Rms и не NewHope\RmsUpdate).

Итак, конфигурация, которая вам здесь нужна, это

<helpers>
    <rms>
        <class>NewHope_RmsUpdate_Helper</class>
    </rms>
</helpers>

Таким образом, это создаст класс NewHope_RmsUpdate_Helper_Data и, таким образом, сначала он будет искать в местоположении app/code/local/NewHope/RmsUpdate/Helper/Data.php. Содержимое файла должно выглядеть следующим образом.

<?php
class NewHope_RmsUpdate_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Надеюсь, это даст вам представление о том, что такое действительно происходит в задней части

 3
Author: Rajeev K Tomy, 2014-09-02 01:22:54

Имя вашего вспомогательного класса модуля должно быть в

App/code/local/NewHope/RmsUpdate/Helper/Data.php

class NewHope_RmsUpdate_Helper_Data extends Mage_Core_Helper_Abstract
{
    ...
}

И ваш xml-файл должен быть

<helpers>
            <rms>
                <class>NewHope_RmsUpdate_Helper</class>
            </rms>
        </helpers>

И позвоните Mage::helper('rmsupdate');

 2
Author: Pradeep Sanku, 2014-09-01 18:07:42

Есть только one issue on helper class declaration in config.xml.

Поскольку путь к вашему вспомогательному классу равен local/NewHope/RmsUpdate/Helper/Data.php, это означает, что ваш вспомогательный базовый класс NewHope_RmsUpdate_Helper.

И вот почему config.xml код вспомогательного класса выглядит следующим образом

<class>NewHope_RmsUpdate_Helper</class>

И, как вы называете helper at observer file using Mage::helper('rms'), это означает, что помощник type defined you как rms и <rms></rms> defined as helper type

Эта вспомогательная конфигурация является

        <helpers>
            <rms>
                <class>NewHope_RmsUpdate_Helper</class>
            </rms>
        </helpers>
 1
Author: Amit Bera, 2014-09-02 01:17:17

Я столкнулся с той же проблемой, ошибка, которую я сделал compilation mode, была включена при установке расширения с magento connect manager.

Я переустановил расширение после отключения режима компиляции System->Tools->Compilation, и оно работало для меня без каких-либо ошибок. Надеюсь, это поможет другим народам.

 0
Author: Sohan, 2016-03-16 06:51:10