Magento 2 - In che caso utilizzo di.xml e come utilizzare di.xml per il modulo?


Risposte:


53

What case We use di.xml ?

  • Possiamo usare di.xml per (riscrivere) la preferenza di una particolare classe.
  • Siamo in grado di inviare nuovi o sostituire gli argomenti di classe esistenti .
  • Usa i plugin per fare alcune cose prima, dopo e intorno alla funzione
  • Utilizzando virtualTypes creando una sottoclasse di un'altra classe.

Facciamo un rapido esempio dal modulo clienti di Magento 2.

1.Preference

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

Sopra il codice, quando qualcuno ti chiede di creare un'istanza Magento\Customer\Api\AddressRepositoryInterface, verrà creata un'istanza di un oggetto Magento \ Customer \ Model \ ResourceModel \ AddressRepository (l'attributo type).

La configurazione delle preferenze delle classi non è solo per le interfacce, ma possiamo anche cambiare le classi reali.

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

È possibile creare la classe "customModel" per "CustomerManagement" ed eseguire le modifiche. Sistema di preferenza di classe in sostituzione del sistema di riscrittura di classe.

http://alanstorm.com/magento_2_object_manager_preferences

2. Argomenti

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

Nel codice precedente, stiamo inviando l'oggetto come argomento, stiamo dicendo al sistema di inserire la classe "Proxy" come oggetto con il nome di groupManagement. Inoltre, possiamo usare Argomenti anche per sostituire l'argomento esistente.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. Plugin

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

Nel codice sopra, public function clean($object)nella classe visitatore viene chiamato dopo la funzione pubblica afterClean(Visitor $subject, $logResourceModel)che è nella classe Log.

4 tipi virtuali

Creare un tipo virtuale è come creare una sottoclasse per una classe esistente.

Per ulteriori note, consulta gli esempi pratici che ho citato come collegamenti da Alan, in pratica puoi ottenere un'esperienza più chiara.

Spero che sia di aiuto.... :)


1
hai idea della configurazione impostata con ifconfig in di.xml per abilitare / disabilitare il processo del modulo? se ci sei, per favore aiutami a risolvere il problema.
Kartik Asodariya,

Informazioni molto utili
Shivam,

2
In che modo qualcuno impara tutte queste cose?
Mohammed Joraid,

Quindi il <preference> invece di chiamare la classe in "for", chiama la classe in "type" o qualcosa del genere? Sono ancora confuso su questo. @@
fudu

3
oh nvm, ho trovato questa risposta davvero buona qui. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
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.