假設你有一個類名Space_Module_Model_LongModelName
和要引用它:是否可以在Magento模型中使用CamelCase類名?
Mage::getModel('module/longmodelname');
這似乎在某些開發環境中工作,但似乎並沒有在所有的環境中工作。可能與文件系統區分大小寫設置有關。
在不起作用的環境中得到的錯誤是include()
對於Space/Module/Model/Longmodelname.php
失敗。
假設你有一個類名Space_Module_Model_LongModelName
和要引用它:是否可以在Magento模型中使用CamelCase類名?
Mage::getModel('module/longmodelname');
這似乎在某些開發環境中工作,但似乎並沒有在所有的環境中工作。可能與文件系統區分大小寫設置有關。
在不起作用的環境中得到的錯誤是include()
對於Space/Module/Model/Longmodelname.php
失敗。
您的config.xml中有一個名爲global/models/yourpackage的配置節點,您可以在其中爲您的類模型保存您的前綴。
當你調用Mage :: getModel('packagename/classname')時,Magento獲取這個配置節點,例如Company_Yourmodule_Models增加了_,然後用首字母大寫的類名:
Company_Yourmodule_Models_Classname
如果你有駝峯類名,這也是同樣的道理。所以我們可以說你的類的名字是類名,那麼你必須調用法師:: getModel(‘包名/類名’)和Magento的解析到:Company_Yourmodule_Models_ClassName
確實有可能使用camelcase - 你可以看到模塊例如Magento核心中的ImportExport。我認爲所有的事情都是關於在xmls中設置正確的(使用駱駝案例)名稱
謝謝耶,但我想你指的是駱駝模塊名稱而不是*型號*的名字,他們不同的問題 - 但兩者都可能現在我知道:) – kalenjordan
看看app/code/core/Mage/Core/Model/Config.php
專門getGroupedClassName();
,你會發現uc_words
是在構建$className
時使用該方法,該類型將在類名字符串中使用其他每個單詞。
因此,您的班級名稱LongModelName
將成爲包括的Longmodelname
。
你可以很容易地擴展這個以你想要的方式工作,但是因爲它的這樣一個主要的Magento工廠世代個人我不會觸及它害怕打破其他第三方模塊,並與非駱駝案例命名空間。
ImportExport工作原因是因爲它是模塊名稱而不是類名。我之前遇到過同樣的問題,而且很煩人,因爲我傾向於僅將類名稱保留爲非Camel。
感謝Boomer。我認爲uc_words()實際上大寫了第一個字母,但並不強制小寫其餘的字母。所以我認爲Fabian提出的駱駝式的類別別名會有訣竅! – kalenjordan
四年後,另一注:
如果你想使用類名駝峯除了文件名,請確保您{} 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>
```
的部分應當與F被駝峯格式第一封信小寫。否則,你會得到Can't retrieve entity config: yourmodule/longModelName
異常(見Mage_Core_Model_Resource::getTableName()
)
嗨Schrank。歡迎@StackOverflow。 –
感謝您的熱烈歡迎:) –