Mage :: getModel() - 在登台服务器上的非对象上的getCollection()

时间:2014-06-12 10:46:39

标签: php magento module

我为Magento创建了一个自定义横幅模块,并且我在我的Vagrant / VirtualBox设置上本地测试了它,运行了一个精确的32实例,一切都运行良好。

当我将代码从GitHub拉到登台服务器时,扩展程序无效,我收到以下错误:

PHP致命错误:在第7行的/var/colourbox/app/code/local/AffinityCloud/ACBanners/Block/Slider.php中的非对象上调用成员函数getCollection(),参考文献:{{3 }}

这是在查看主页时,所以我不确定为什么它引用http://colourbox.affinitycloud.co.uk/tub-storage.html作为引用,因为这是一个类别页面。

我已清除缓存(无论如何已禁用)并重新编制索引。 Stil没有快乐。我还尝试使用小写字符重命名模型类,第一个字符大写但没有结果。

我已将模块代码添加到下面的GitHub,以便您可以看到代码:

http://colourbox.affinitycloud.co.uk/tub-storage.html

为什么会在本地而不是在登台服务器上运行的任何想法?它似乎无法找到模型类,但对Slider.php类进行罚款没有问题。

我不知道该怎么做。

注意:为了简洁起见,我想补充说我已经注销并重新登录管理员,同时还删除了模块表和core_resource中的引用无效。它可以很好地创建表,但我仍然遇到相同的问题,并且模块在高级配置中显示为已启用。

1 个答案:

答案 0 :(得分:1)

问题是区分大小写 在Windows系统上,文件名不区分大小写。在Unix上,它们区分大小写。

因此,在配置模块和命名文件的方式中,在调用Mage::getModel('acbanners/acbanners')时,magento自动加载器会查找文件

AffinityCloud/ACBanners/Model/Acbanners.php但您文件的真实姓名为AffinityCloud/ACBanners/Model/ACBanners.php

因此找不到该文件且未加载该类,Mage::getModel(...)返回null。

这里有2个选项。

  1. 最干净,最快。将Model文件夹中的所有类重命名为以大写字母开头,其余类应为小写。上例中的Acbanners.php。您可能需要对BlockHelper中的文件执行相同操作。

  2. 长版。如果您想保留文件名,则需要将Mage::getModel('acbanners/acbanners')更改为Mage::getModel('acbanners/aCBanners')Mage::getModel('acbanners/ACBanners')。但我想这将需要大量的重构。你也可能需要这个块和助手。