Magento - Mage :: getModel无法在Linux服务器上运行

时间:2012-07-07 01:49:22

标签: magento module

我正在努力解决一个我无法找到解释的问题。我有两个用于项目的开发环境。我为Magento创建了一个简单的模块,我在一个环境中测试了它。克服了Magento的所有复杂功能后,该模块按预期工作。这是在XAMPP上。

然后我将模块复制到托管服务器上的开发Linux环境中,它崩溃了。我做了一些调试,我发现对Mage :: getModel()的调用返回 bool(false)而不是我请求的Model的实例。

我仔细检查了所有文件和目录,然后匹配。数据库不涉及(不是来自我自己,至少,我不需要表),并且这两个环境都只有我作为用户,具有管理员权限。

欢迎任何关于我应该从哪里开始寻找的建议,谢谢。

于2012/07/09添加
Model包含一个名为Diego_ClientCustomModule_Model_ExternalUserData的类,该类使用$model = Mage::getModel('clientcustommodule/externaluserdata');调用。模型文件位于Diego_ClientCustomModule\code\local\Diego\ClientCustomModule\Model\。奇怪的是:

  • 如果模型文件名为Externaluserdata.php,则可以正常工作。
  • 如果模型文件名为ExternalUserData.php(即它与类名匹配),则不起作用。

我知道区分大小写的东西等等,但是,如果别名都是小写的,那么为什么它可以加载首字母大写的文件?

配置文件                                     0.1.0                                                            Diego_ClientCustomModule_Helper                                                     Diego_ClientCustomModule_Model                                                     Diego_ClientCustomModule_Block                                                                   标准                            Diego_ClientCustomModule               ClientCustomModule                                             

2 个答案:

答案 0 :(得分:5)

了解您寻求帮助的框架可能不是获得帮助的最佳策略。

您的问题可能是缓存(删除要检查的var / cache文件夹)或其中一个不正确的大小写。请注意,自动加载器加载的文件的每个目录和文件名的第一个字母(块,模型和帮助程序)。

答案 1 :(得分:3)

我似乎找到了问题的根本原因,虽然我无法弄清楚实现了什么样的逻辑来实现它。

模型的文件名是 UserCustomModule.php ,它反映了类名 UserCustomModule 。这是有道理的,并且在XAMPP中表现非常出色。一旦我在Linux机器上安装了相同的模块,Magento就会默默地忽略该文件,并且如前所述,没有办法追踪Magento的行为。

按照benmark的建议,我再次浏览了所有文件以检查外壳,一切似乎都匹配。然后我做了一些东西,在我看来,完全是愚蠢的,我将模型文件重命名为 Usercustommodule.php ,保持类名不变(毕竟,PHP应该表现为在两个平台上都是一样的,与文件系统不同)。神奇的是,该模块现在可以工作!文件名看起来像cr * p,但它可以工作。

这解决了这个问题,但却提出了更多问题:

  • 为什么Magento在加载带有CamelCase名称的文件时遇到了麻烦?如果它是自动加载,它应该只是找到一个文件并加载它。毕竟,它加载了Controller,Block和其他所有内容,并且它们在CamelCase中 all
  • 是否在任何地方写入一个或多个文件必须只有首字母大写?我已经获得了足够的惊喜,如果可能的话,我想避免新的。

再次感谢您的帮助。