Ist es möglich, CamelCase-Klassennamen in Magento-Modellen zu verwenden?

7

Nehmen wir an, Sie haben einen Klassennamen Space_Module_Model_LongModelName , und Sie möchten darauf verweisen:

%Vor%

Dies scheint in einigen Entwicklungsumgebungen zu funktionieren, scheint aber nicht in allen Umgebungen zu funktionieren. Wahrscheinlich hat dies mit der Einstellung der Groß- / Kleinschreibung für das Dateisystem zu tun.

Der Fehler, den Sie in Umgebungen erhalten, in denen er nicht funktioniert, ist, dass include() für Space/Module/Model/Longmodelname.php fehlgeschlagen ist.

    
kalenjordan 18.07.2012, 17:37
quelle

4 Antworten

16

Sie haben einen config-Knoten in Ihrer config.xml namens global / models / yourpackage, in dem Sie Ihr Präfix für Ihre Klassenmodelle speichern.

Wenn Sie Mage :: getModel ('Paketname / Klassenname') aufrufen, ruft Magento diesen Konfigurationsknoten z.B. Company_Yourmodule_Models fügt einen _ und dann den Klassennamen mit dem ersten Großbuchstaben hinzu:

Company_Yourmodule_Models_Classname

Wenn Sie cAMElcaSe Klassennamen haben, ist es genauso. Nehmen wir an, der Name Ihrer Klasse ist Klassenname, dann müssen Sie Mage :: getModel ('Paketname / Klassenname') aufrufen, und Magento löst ihn auf: Company_Yourmodule_Models_ClassName

    
Fabian Blechschmidt 18.07.2012, 17:59
quelle
2

Sehen Sie sich app/code/core/Mage/Core/Model/Config.php spezifisch getGroupedClassName(); an, da Sie feststellen werden, dass uc_words in der Methode verwendet wird, wenn Sie $className erstellen, wodurch jedes zweite Wort in der Klassennamen-Zeichenfolge großgeschrieben wird.

So wird Ihr Klassenname von LongModelName Longmodelname für das Include.

Du könntest das einfach so erweitern, dass es so funktioniert, wie du es willst, aber da es so ein wichtiges Stück von Magentos Fabrikgeneration persönlich ist, würde ich es nicht anfassen, aus Angst, andere Module von Drittanbietern zu brechen und mit dem Namespace von Nicht-Kamelen leben.

Der Grund, warum ImportExport funktioniert, ist, dass es der Modulname und nicht ein Klassenname ist. Ich bin auf dasselbe Problem gestoßen und so nervig wie es ist, tendiere ich dazu, nur Klassennamen zu behalten, die nicht Camel sind.

    
B00MER 18.07.2012 18:07
quelle
1

Sicher gibt es die Möglichkeit, Camelcase zu verwenden - Sie können Modul z. ImportExport im Magento-Kern. Ich denke, es geht darum, korrekte Namen (mit Camel Cases) in xmls zu setzen

    
Jerzy Zawadzki 18.07.2012 17:44
quelle
0

Vier Jahre später noch eine Anmerkung:

Wenn Sie camelCased-Klassennamen zusätzlich zu Dateinamen verwenden möchten, stellen Sie sicher, dass der folgende Teil Ihrer {moduleName} /etc/config.xml ebenfalls camelCased ist:

'' 'xml

%Vor%

'' '

Der Teil sollte camelCased sein, wobei der erste Buchstabe kleiner ist. Andernfalls erhalten Sie eine Ausnahme von Can't retrieve entity config: yourmodule/longModelName

(siehe Mage_Core_Model_Resource::getTableName() )

    
SteveFromAccounting 10.11.2016 19:41
quelle

Tags und Links