Неустранимая ошибка с Custom Magento Module на одном сервере, но не на другом - PullRequest
1 голос
/ 16 января 2011

Я создаю свой собственный пользовательский модуль в Magento и во время тестирования на сервере Litespeed (PHP v5.2.14) я получаю Fatal Error: Call to a member function batch() on a non-object in ../../../BatchController.php on line 25, который не появлялся во время тестирования на другом сервере Linux и сервере Wamp (PHP v5. 2,11).

Этот поставил меня в тупик. Я предполагаю, что это имеет отношение к конфигурации сервера, а не к самому коду. Но я просто догадываюсь. Я надеялся, что кто-то здесь может сказать мне.

Единственное реальное существенное отличие, которое я вижу, кроме версий и среды php, заключается в том, что сервер, на котором включена ошибка, использует Suhosin Patch. Но может ли это быть причиной этого?

Строка, о которой идет речь, - Mage::getModel('mymodule/mymodel')->batch();, заключенная в оператор IF. batch() - публичная функция, расположенная в моем файле модели.

Если вам нужно больше кода, дайте мне знать.

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 января 2011

Разбейте его.

Вы пытались вызвать

Mage::getModel('mymodule/mymodel')->batch();

, и PHP сказал вам, что он пытался вызвать пакетный метод для не-объект .Это означает, что

Mage::getModel('mymodule/mymodel')

не возвращает объект Model так, как он должен.

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

Второй шаг - убедиться, что файл app/etc/module вашего модуля находится на месте.

Третий шаг - добавить отладку (с учетом ветки 1.4) в метод, который создает экземпляры ваших объектов и определяет , почему Magento не может создать ваш объект

File:   app/code/core/Mage/Core/Model/Config.php
...
public function getModelInstance($modelClass='', $constructArguments=array())
{
    $className = $this->getModelClassName($modelClass);
    if (class_exists($className)) {
        Varien_Profiler::start('CORE::create_object_of::'.$className);
        $obj = new $className($constructArguments);
        Varien_Profiler::stop('CORE::create_object_of::'.$className);
        return $obj;
    } else {
        #throw Mage::exception('Mage_Core', Mage::helper('core')->__('Model class does not exist: %s.', $modelClass));
        return false;
    }
}
...    
1 голос
/ 16 января 2011

Если при вызове модели появляется ошибка «необъектного», возникает проблема с попыткой Magento получить класс модели, и он возвращает ноль. Причины этого не всегда очевидны. Если это работает одинаково в обычном стеке LAMP, то проблема, скорее всего, не в вашем коде.

Моим первым предположением будет то, что файл не имеет надлежащих разрешений. В противном случае это может быть связано с разрешением имени класса. Вы можете временно проверить это, вызвав плагин прямо так:

$obj = new Mynamespace_Mymodule_Model_Mymodel();
$obj->batch();

Если это работает, то файл доступен для чтения, и вы захотите разобраться в разрешении этого имени класса. Если это не работает, у вас проблема с автозагрузкой или объявлением вашего класса.

Надеюсь, это поможет!

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...