Magento 1-Klassenumschreibung in Magento 2 mit Dependency-Injection-System
Frage
Stochern Der Kerncode von Magento 2, es sieht so aus, als ob das alte Klassenumschreibungssystem herausgerissen und durch ein neues Abhängigkeitsinjektionssystem ersetzt wurde.
Leider gibt es keine Dokumentation für dieses neue System.
Hat jemand ein Modulkonfigurationsbeispiel, mit dem ein Benutzer in Magento 2 die Klasse „neu schreiben“ kann? Mage_Catalog_Model_Product
mit einer neuen Klasse Packagename_Modulename_Model_Product
, das neue Abhängigkeitsinjektionssystem verwenden?
Lösung
Die DI -Konfiguration wurde in DI.XML -Dateien verschoben und das Format geändert. Jetzt sehen Einstellungen so aus (di.xml):
<config>
<preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>
Andere Tipps
Wenn ich von innen nach außen arbeitete, konnte ich eine Umschreibung mit den folgenden Arbeiten bekommen
<global>
<di>
<preferences>
<Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
</preferences>
</di>
</global>
Es gibt jedoch viel mehr Systemcode in der Implementierung der Abhängigkeitsinjektion, sodass nicht klar ist, ob die oben genannte in der endgültigen veröffentlichten Version von Magento 2 funktioniert.
Sie haben Recht, Klassenumschreibungen wurden vollständig eliminiert und durch DI ersetzt.Die folgenden Anmerkungen stammen aus dem folgenden Abschnitt Änderungen des Anwendungsframeworks:
Magento 1.x — Knoten:/global//{Unterpfad, der dem Fabriknamen + „rewrite“-Literal entspricht}
<global>
...
<models>
<core>
<rewrite>
<url>My_Module_Model_Url</url>
</rewrite>
</core>
</models>
...
</global>
Magento 2.x — Knoten:/global/di/aliases
<global>
...
<di>
<aliases>
<Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
</aliases>
</di>
...
</global>
Ich habe nicht versucht, dies in einem Modul zu verwenden, das in Magento 2.0 ausgeführt wird, aber es scheint, dass Sie grundsätzlich einen Alias für den Klassennamen definieren, anstatt die komplizierte XML-Hierarchie für Modulumschreibungen zu verwenden.