Risposte:
What case We use di.xml ?
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.... :)