2012-07-18 53 views
7

假設你有一個類名Space_Module_Model_LongModelName和要引用它:是否可以在Magento模型中使用CamelCase類名?

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

這似乎在某些開發環境中工作,但似乎並沒有在所有的環境中工作。可能與文件系統區分大小寫設置有關。

在不起作用的環境中得到的錯誤是include()對於Space/Module/Model/Longmodelname.php失敗。

回答

16

您的config.xml中有一個名爲global/models/yourpackage的配置節點,您可以在其中爲您的類模型保存您的前綴。

當你調用Mage :: getModel('packagename/classname')時,Magento獲取這個配置節點,例如Company_Yourmodule_Models增加了_,然後用首字母大寫的類名:

Company_Yourmodule_Models_Classname

如果你有駝峯類名,這也是同樣的道理。所以我們可以說你的類的名字是類名,那麼你必須調用法師:: getModel(‘包名/類名’)和Magento的解析到:Company_Yourmodule_Models_ClassName

+1

嗨Schrank。歡迎@StackOverflow。 –

+0

感謝您的熱烈歡迎:) –

1

確實有可能使用camelcase - 你可以看到模塊例如Magento核心中的ImportExport。我認爲所有的事情都是關於在xmls中設置正確的(使用駱駝案例)名稱

+0

謝謝耶,但我想你指的是駱駝模塊名稱而不是*型號*的名字,他們不同的問題 - 但兩者都可能現在我知道:) – kalenjordan

2

看看app/code/core/Mage/Core/Model/Config.php專門getGroupedClassName();,你會發現uc_words是在構建$className時使用該方法,該類型將在類名字符串中使用其他每個單詞。

因此,您的班級名稱LongModelName將成爲包括的Longmodelname

你可以很容易地擴展這個以你想要的方式工作,但是因爲它的這樣一個主要的Magento工廠世代個人我不會觸及它害怕打破其他第三方模塊,並與非駱駝案例命名空間。

ImportExport工作原因是因爲它是模塊名稱而不是類名。我之前遇到過同樣的問題,而且很煩人,因爲我傾向於僅將類名稱保留爲非Camel。

+0

感謝Boomer。我認爲uc_words()實際上大寫了第一個字母,但並不強制小寫其餘的字母。所以我認爲Fabian提出的駱駝式的類別別名會有訣竅! – kalenjordan

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> 

```

的部分應當與F被駝峯格式第一封信小寫。否則,你會得到Can't retrieve entity config: yourmodule/longModelName

異常(見Mage_Core_Model_Resource::getTableName()

相關問題