假设您有一个班级名称Space_Module_Model_LongModelName
,并且您想将其引用为:
Mage::getModel('module/longmodelname');
这似乎适用于某些开发环境,但似乎并不适用于所有环境。可能与文件系统区分大小写设置有关。
在不起作用的环境中出现的错误是include()
的{{1}}失败。
答案 0 :(得分:16)
config.xml中有一个名为global / models / yourpackage的配置节点,您可以在其中保存类模型的前缀。
当您调用Mage :: getModel('packagename / classname')时,Magento会获取此配置节点,例如Company_Yourmodule_Models添加_然后使用大写的第一个字母添加类名:
Company_Yourmodule_Models_Classname
如果您有cAMElcaSe类名,则方法相同。因此,假设您的类名称为ClassName,则必须调用Mage :: getModel('packagename / className'),magento将其解析为:Company_Yourmodule_Models_ClassName
答案 1 :(得分:2)
在构建app/code/core/Mage/Core/Model/Config.php
时,您会注意到方法中使用了getGroupedClassName();
,因此请仔细查看uc_words
$className
,这会将其中的所有其他字词大写类名字符串。
因此,您的LongModelName
类名称将成为Longmodelname
。
你可以轻松扩展它以你想要的方式工作,但由于它是Magento工厂一代的主要部分,我不会碰它,因为害怕破坏其他第三方模块,并且与非驼峰式命名空间一起生活。
ImportExport的工作原因是因为它是模块名称而不是类名。我以前遇到过同样的问题而且很烦人,因为我倾向于只保留非Camel类的名字。
答案 2 :(得分:1)
肯定有可能使用camelcase - 你可以看到模块,例如Magento核心中的ImportExport。我认为所有都是关于在xmls
中设置正确的(带有驼峰案例)名称答案 3 :(得分:0)
四年后,另一个注意事项:
如果你想使用除文件名之外的camelCased类名,请确保 {moduleName} /etc/config.xml 的以下部分也是camelCased:
```的xml
<global>
<models>
<ProbablyYourCompanyOrModuleName>
<ModuleName_resource>
<entities>
<!-- "longModelName" below should be CamelCased, but prob the first letter will be lowercased -->
<longModelName>
<table>your_db_table_name</table>
</longModelName>
</entities>
</ModuleName_resource>
</ProbablyYourCompanyOrModuleName>
</models>
</global>
```
该部分应该是camelCased,第一个字母是小写的。否则,您将获得Can't retrieve entity config: yourmodule/longModelName
(见Mage_Core_Model_Resource::getTableName()
)