Фатальная ошибка: Класс "Вспомогательные данные 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');
}
}
У меня есть эти подсказки:
- Я экспериментировал с изменением config.xml
<rms>
тег к чему-то произвольному, что, как я знал, было неправильным, и ошибка все еще оставалась идентичной. - В промежутках между каждой попыткой я вручную удалял папка var/cache, поэтому, хотя вышеуказанные пункты кажутся проблемой кэширования, я думаю, что это не так.
- Компиляция уже отключена, проблема не в этом.
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
{
}
Надеюсь, это даст вам представление о том, что такое действительно происходит в задней части
Имя вашего вспомогательного класса модуля должно быть в
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');
Есть только 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>
Я столкнулся с той же проблемой, ошибка, которую я сделал compilation mode
, была включена при установке расширения с magento connect manager
.
Я переустановил расширение после отключения режима компиляции System->Tools->Compilation
, и оно работало для меня без каких-либо ошибок. Надеюсь, это поможет другим народам.