4

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

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

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

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

添加于 2012/07/09
模型包含一个名为 的类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

4

2 回答 2

5

对你寻求帮助的框架嗤之以鼻可能不是获得帮助的最佳策略。

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

于 2012-07-07T02:48:16.577 回答
3

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

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

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

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

  • 由于什么原因 Magento 无法加载带有 CamelCase 名称的文件?如果是自动加载,它应该简单地找到一个文件并加载它。毕竟,它加载了Controller、Block和其他所有东西,而且它们都CamelCase中。
  • 它是否写在一个或多个文件必须只有第一个字母大写的地方?我已经得到了足够多的惊喜,如果可能的话,我想避免新的惊喜。

再次感谢您的帮助。

于 2012-07-07T10:24:10.250 回答