Magento 1 Class Rewrite in Magento 2 mit Abhängigkeitsinjektionssystem

10

Stochern Magento 2 Kerncode , es sieht aus wie das alte Klasse Rewrite - System mit einem neuen Abhängigkeit Einspritzanlage gerissen worden und ersetzt.

Leider gibt es keine Dokumentation für dieses neue System.

Hat jemand ein Modulkonfigurationsbeispiel, mit dem ein Benutzer in Magento 2 die Klasse Mage_Catalog_Model_Productmit einer neuen Klasse Packagename_Modulename_Model_Productunter Verwendung des neuen Abhängigkeitsinjektionssystems "umschreiben" kann?

Alan Storm
quelle
Ich dachte, Magento 2.0 Fragen waren noch nicht erlaubt meta.magento.stackexchange.com/questions/79/…
Marius

Antworten:

10

Die Di-Konfiguration wurde in die Dateien di.xml verschoben und das Format geändert. Jetzt sehen die Einstellungen folgendermaßen aus (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>
Anton Kril
quelle
Wenn es sich um eine Klassenumschreibung handelt, ist es vorzuziehen, ein Plugin anstelle eines Präferenzknotens zu verwenden?
Huzefam
2
Wenn Sie das Verhalten einer Kernklasse ersetzen müssen, sollten Sie die Einstellungen verwenden. Wenn Sie das Verhalten einer Kernmethode ersetzen müssen, sollten Sie ein Plugin mit einem Listener verwenden, das $ continue () nicht aufruft. Wenn Sie einer Kernmethode oder -klasse Verhalten hinzufügen müssen, sollten Sie Plugins verwenden.
Anton Kril
5

Ich arbeitete von innen nach außen und konnte eine Umschreibung mit den folgenden Funktionen durchführen

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

Die Implementierung der Abhängigkeitsinjektion enthält jedoch viel mehr Systemcode, sodass nicht klar ist, ob die oben genannten Funktionen in der endgültig veröffentlichten Version von Magento 2 funktionieren.

Alan Storm
quelle
Es scheint also, dass sie im Grunde genommen "Alias" in Einstellungen umbenannt und nach oben verschoben haben? Interessant. Ich freue mich darauf, die Aktualisierungen der Dokumentation zu sehen. Peter sagte, sie hätten es, aber es wurde nicht alles auf die Docs-Site verschoben, zumindest nicht auf das IIRC.
Davidalger
5

Sie haben Recht, Klassenumschreibungen wurden vollständig eliminiert und durch DI ersetzt. Die folgenden Hinweise stammen aus dem Abschnitt über Änderungen am Application Framework :

Magento 1.x - Knoten: / global // {Unterpfad, der dem Fabriknamen + Literal "umschreiben" entspricht}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x - Knoten: / global / di / alias

<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 im Grunde genommen einen Alias ​​für den Klassennamen definieren, anstatt die komplizierte Hierarchie von XML für das Umschreiben pro Modul zu verwenden.

Davidalger
quelle
1
+1 für die Application Framework-Seite, aber dies funktioniert im neuesten Magento 2-Snapshot, den ich erstellt habe, nicht.
Alan Storm