Magento-Mage::getModel在Linux服务器上不工作
我正在努力解决一个我找不到解释的问题。我有两个用于我的项目的开发环境。我为Magento创建了一个简单的模块,并在一个环境中进行了测试。在克服了Magento的所有复杂性后,该模块按预期工作。这是在XAMPP上 然后,我将该模块复制到一个托管服务器上的开发Linux环境中,它严重崩溃。我做了一些调试,发现调用Mage::getModel()会返回bool(false),而不是我请求的模型实例 我仔细检查了所有文件和目录,它们都匹配。数据库不涉及(至少从我的角度来看,我不需要表),而且这两个环境都只有我作为用户,具有管理员权限 任何关于我应该从哪里开始寻找的建议都是欢迎的,谢谢 于2012/07/09添加Magento-Mage::getModel在Linux服务器上不工作,magento,module,Magento,Module,我正在努力解决一个我找不到解释的问题。我有两个用于我的项目的开发环境。我为Magento创建了一个简单的模块,并在一个环境中进行了测试。在克服了Magento的所有复杂性后,该模块按预期工作。这是在XAMPP上 然后,我将该模块复制到一个托管服务器上的开发Linux环境中,它严重崩溃。我做了一些调试,发现调用Mage::getModel()会返回bool(false),而不是我请求的模型实例 我仔细检查了所有文件和目录,它们都匹配。数据库不涉及(至少从我的角度来看,我不需要表),而且这两个环境都
模型包含一个名为
Diego\u ClientCustomModule\u Model\u ExternalUserData
的类,该类通过$Model=Mage::getModel('ClientCustomModule/ExternalUserData')调用代码>。模型文件位于Diego\u ClientCustomModule\code\local\Diego\ClientCustomModule\Model\
中。奇怪的是:
- 如果模型文件名为
Externaluserdata.php
,则它可以工作
- 如果模型文件名为
ExternalUserData.php
(即,它与类名匹配),则它不起作用
我知道区分大小写的东西,但是,如果别名都是小写的,它怎么能加载第一个字母大写的文件呢
配置文件
0.1.0
Diego_客户端自定义模块\u帮助程序
Diego_客户定制模块_模型
Diego_客户端自定义模块_块
标准
Diego_客户端自定义模块
客户端自定义模块
对你正在寻求帮助的框架喋喋不休可能不是获得帮助的最佳策略
您的问题可能是缓存(要检查的移除var/cache文件夹)或不正确的大小写。请注意,自动加载程序(块、模型和帮助程序)加载的文件的每个目录和文件名的第一个字母。似乎我已经找到了问题的根本原因,尽管我不知道实现了什么样的逻辑
模型的文件名是UserCustomModule.php,它反映了类名UserCustomModule。这是有道理的,并且在XAMPP中工作得非常好。一旦我在Linux机器上安装了相同的模块,Magento就会悄悄地忽略该文件,正如前面所述,无法跟踪Magento的操作
根据本马克的建议,我再次检查了所有的文件以检查外壳,所有的东西似乎都匹配。然后,在我看来,我做了一些完全愚蠢的事情,我将模型文件重命名为Usercustommodule.php,保持类名不变(毕竟,与文件系统不同,php在两种平台上的行为应该相同)。神奇的是,模块现在可以工作了!文件名看起来像cr*p,但它可以工作
这解决了问题,但也引发了更多问题:
- Magento加载CamelCase名称的文件时遇到问题的原因是什么?如果是自动加载,它只需找到一个文件并加载即可。毕竟,它加载控制器、块和其他所有内容,在这种情况下,它们都是all
- 一个或多个文件必须只大写第一个字母,这是写在任何地方的吗?我已经有足够多的惊喜了,如果可能的话,我想避免新的惊喜
再次感谢您的帮助。我删掉了snark——这类事情往往会阻碍人们回答。你想实例化什么模型?撇开它不只是snarking,该模型是我自己的自定义模型。如果你提供你正在使用的类别名的名称以及类本身,它可以帮助人们跟踪你的问题或排除某些事情。它增加了有人能够提供帮助的机会。@A谢谢,我解决了这个问题。然而,出于好奇,你说的“类别名”是什么意思?正如我在回答中所写的,这个问题与文件名的大写有关,但我仍然不理解。在软件开发界,这并不是一个模糊的问题。学会接受Magento做事的方式是让它工作的关键。getModel、getBlock和helper方法中的字符串是类别名。Mage::getModel('catalog/product')。字符串catalog/product是类别名。如果您将其与您的config.xml
一起包含,我们就会知道您试图实例化的类,并且可以告诉您需要将文件放到/命名到哪里(间接地引导我们走向大写。谢谢,但是缓存被禁用了,我清理了很多次,现在它亮了。缓存文件夹是空的。我现在想知道的是Magento在哪里记录它的操作,看看它是否更接近模型。我试着放置一个日志操作(Mage::log)在Autoloader中,但这一行会使整个系统崩溃。正如我所回答的,大小写不正确。欢迎使用区分大小写的文件系统和Autoloader。Magento()使用的Autoloader类方法被调用以定位您指定的类名,这些名称是通过使用空格替换u,运行ucwords()生成的
在名称“句子”上,用OS目录分隔符替换空格,添加“.php”,然后include()
ing文件.FWIW,如果这一切看起来都很无聊,那就是(1)OS问题和(2)Zend Framework约定