7

假设您有一个类名Space_Module_Model_LongModelName,并且希望将其引用为:

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

这似乎在某些开发环境中有效,但似乎并非在所有环境中都有效。可能与文件系统区分大小写设置有关。

您在它不起作用的环境中遇到的错误是include()forSpace/Module/Model/Longmodelname.php失败。

4

4 回答 4

17

您的 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

于 2012-07-18T17:59:37.317 回答
2

app/code/core/Mage/Core/Model/Config.php具体看一下getGroupedClassName();,您会注意到uc_words在构建 时在方法中使用了$className,它会将类名字符串中的每个其他单词大写。

所以你的类名将LongModelName成为Longmodelname包含。

您可以轻松地扩展它以按照您想要的方式工作,但由于它是 Magento 工厂一代的主要部分,我不会因为害怕破坏其他 3rd 方模块而接触它,并且使用非骆驼案例命名空间。

ImportExport 起作用的原因是因为它是模块名称而不是类名称。我以前也遇到过同样的问题,而且很烦人,我倾向于只保留非骆驼式的类名。

于 2012-07-18T18:07:09.367 回答
1

肯定有可能使用驼峰式 - 您可以在 Magento 核心中看到模块,例如 ImportExport。我认为一切都是关于在 xmls 中设置正确的(使用骆驼案例)名称

于 2012-07-18T17:44:54.293 回答
0

四年后,另一个注释:

如果除了文件名之外还想使用驼峰命名的类名,请确保{moduleName}/etc/config.xml的以下部分也是驼峰命名的:

```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>

```

该部分应为驼峰式,首字母小写。否则,你会得到一个例外Can't retrieve entity config: yourmodule/longModelName

(见Mage_Core_Model_Resource::getTableName()

于 2016-11-10T19:41:59.910 回答