是否可以在Magento模型中使用CamelCase类名?

时间:2012-07-18 17:37:10

标签: magento

假设您有一个班级名称Space_Module_Model_LongModelName,并且您想将其引用为:

Mage::getModel('module/longmodelname');

这似乎适用于某些开发环境,但似乎并不适用于所有环境。可能与文件系统区分大小写设置有关。

在不起作用的环境中出现的错误是include()的{​​{1}}失败。

4 个答案:

答案 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()