2011-01-16 6 views
1

Я создаю свой собственный модуль в 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).Неустранимая ошибка с настраиваемым модулем Magento на одном сервере, но не другом

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

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

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

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

Спасибо!

+0

Вы 100% уверены, что это линия в вопросе? Потому что 'remove()' должно быть там. Вы на 100% уверены, что ищете нужный файл? –

+0

Я на 100% уверен. 'remove()' был там, потому что я видел, произошло ли это с другой функцией, вызванной таким же образом, и это произошло. – Jack

ответ

1

Если вы вызываете ошибку "non-object" при вызове модели, возникает проблема с попыткой Magento получить класс модели и возвращает значение null. Причины этого не всегда очевидны. Если это работает одинаково в обычном стеке LAMP, проблема скорее всего не в вашем коде.

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

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

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

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

Спасибо, Джо

+0

@Joe: Используя метод выше, все работает. Можете ли вы рассказать о «вопросечивании в разрешении этого класса»? В чем проблема с использованием вышеприведенного кода? Спасибо! – Jack

+0

Я рад, что код работает для вас. Аргументом против использования этого является то, что вы теперь успешно избегали Magento целиком, что может укусить вас по дороге. Взгляните на код Алана о получении имени класса, в котором находится ваша проблема. Ваша конфигурация не читается (по крайней мере, не так, как вы думаете), которая должна быть исправлена ​​во время разработки. –

1

сломать.

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

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

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

Mage::getModel('mymodule/mymodel') 

не возвращает объект модели так, как предполагается.

Первое, что нужно сделать, это очистить свой кэш 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; 
    } 
} 
...  
+0

Спасибо за советы. Я очистил кеш без везения. Все файлы находятся в правильном месте. Когда я использую getModelInstance, он возвращает false. – Jack

+0

@Jack: добавьте туда отладочный код и выясните, почему он возвращает false. Проверьте, что строка находится в переменной «$ className». Если метод возвращает false, это потому, что этот класс не существует. –

 Смежные вопросы

  • Нет связанных вопросов^_^