Classe Magento 1 Riscrivi in ​​Magento 2 con Dependency Injection System


10

Cercando il codice principale di Magento 2 , sembra che il vecchio sistema di riscrittura di classe sia stato strappato e sostituito con un nuovo sistema di iniezione di dipendenza.

Sfortunatamente, non c'è documentazione per questo nuovo sistema.

Qualcuno ha un esempio di configurazione del modulo che consentirebbe a un utente, in Magento 2, di "riscrivere" la classe Mage_Catalog_Model_Productcon una nuova classe Packagename_Modulename_Model_Product, usando il nuovo sistema di iniezione di dipendenza?


Pensavo che le domande di Magento 2.0 non fossero ancora consentite meta.magento.stackexchange.com/questions/79/…
Marius

Risposte:


10

Di configurazione è stata spostata in file di.xml e il formato è stato modificato. Ora le preferenze sono così (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

se si tratta di una riscrittura di classe, è preferibile utilizzare un plug-in anziché un nodo preferenza?
Huzefam,

2
Se è necessario sostituire il comportamento di alcune classi principali, è necessario utilizzare le preferenze. Se è necessario sostituire il comportamento di alcuni metodi di base, è necessario utilizzare il plug-in con listener attorno che non chiamerà $ procedi (). Se devi aggiungere un comportamento a qualche metodo o classe di base, dovresti usare i plugin.
Anton Kril,

5

Lavorando dall'interno, sono stato in grado di ottenere una riscrittura lavorando con il seguente

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

Tuttavia, c'è molto più codice di sistema nell'implementazione dell'iniezione di dipendenza, quindi non è chiaro se quanto sopra funzionerà nella versione finale di Magento 2.


Quindi sembra che abbiano sostanzialmente ribattezzato "alias" in preferenze e spostato in alto? Interessante. Non vedo l'ora di vedere gli aggiornamenti della documentazione. Peter ha detto che ce l'hanno, ma non è stato tutto spinto sul sito di documentazione, almeno IIRC.
davidalger,

5

Hai ragione, le riscritture di classe sono state completamente eliminate e sostituite con DI. Le seguenti note sono tratte dalla sezione sulle modifiche al framework applicativo :

Magento 1.x - Nodo: / global // {sotto-percorso che corrisponde al nome di fabbrica + "riscrivi" letterale}

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

Magento 2.x - Nodo: / global / di / aliases

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

Non ho provato a utilizzarlo in un modulo in esecuzione in Magento 2.0, ma sembra che tu abbia sostanzialmente definito un alias per il nome della classe invece di usare la complessa gerarchia di xml per le riscritture per modulo.


1
+1 per la pagina Application Framework, ma non funziona nell'ultima istantanea di Magento 2 che ho acquisito.
Alan Storm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.