我正在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补丁。但这会导致这种情况吗?
有问题的行是Mage::getModel('mymodule/mymodel')->batch();
,它包含在IF语句中。 batch()
是位于我的模型文件中的公共函数。
如果您需要更多代码,请告诉我们。
谢谢!
答案 0 :(得分:1)
如果在调用模型时出现“非对象”错误,则Magento尝试获取模型类时会出现问题,并且返回null。其原因并不总是很明显。如果这在普通LAMP堆栈上的工作方式相同,则问题很可能不在您的代码中。
我的第一个猜测是该文件没有适当的权限。否则,它可能与解析类名有关。你可以通过直接调用插件来暂时测试这个:
$obj = new Mynamespace_Mymodule_Model_Mymodel();
$obj->batch();
如果这样可行,那么该文件是可读的,您将希望在该类名的解析中进行搜索。如果它不起作用,则您在自动加载或声明您的课程时遇到问题。
希望有所帮助!
谢谢, 乔
答案 1 :(得分:1)
分解。
你试过打电话
Mage::getModel('mymodule/mymodel')->batch();
并且PHP告诉你它试图在非对象上调用方法批处理。这意味着
Mage::getModel('mymodule/mymodel')
没有按照预期的方式返回Model对象。
首先要做的是清除你遇到问题的服务器上的Magento缓存。如果您的Module的配置尚未加载到全局配置树中,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;
}
}
...