Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento-Mage::getModel在Linux服务器上不工作_Magento_Module - Fatal编程技术网

Magento-Mage::getModel在Linux服务器上不工作

Magento-Mage::getModel在Linux服务器上不工作,magento,module,Magento,Module,我正在努力解决一个我找不到解释的问题。我有两个用于我的项目的开发环境。我为Magento创建了一个简单的模块,并在一个环境中进行了测试。在克服了Magento的所有复杂性后,该模块按预期工作。这是在XAMPP上 然后,我将该模块复制到一个托管服务器上的开发Linux环境中,它严重崩溃。我做了一些调试,发现调用Mage::getModel()会返回bool(false),而不是我请求的模型实例 我仔细检查了所有文件和目录,它们都匹配。数据库不涉及(至少从我的角度来看,我不需要表),而且这两个环境都

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

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

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

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

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