Magento 2 - Dans quel cas utiliser di.xml et comment utiliser di.xml pour le module?

12

Dans Magento 2, quel cas utiliser di.xmlet comment utiliser di.xmlpour le module?

Tout le monde le savait, veuillez me montrer étape par étape.

MrTo-Kane
la source
2
Vous pouvez obtenir plus d'informations sur le site officiel de magento: devdocs.magento.com/guides/v2.0/extension-dev-guide/…
Suresh Chikani

Réponses:

53

What case We use di.xml ?

  • Nous pouvons utiliser di.xml pour (réécrire) la préférence d'une classe particulière.
  • Nous pouvons envoyer de nouveaux arguments ou remplacer les arguments de classe existants .
  • Utilisez des plugins pour faire des choses avant, après et autour de la fonction
  • En utilisant virtualTypes, créer une sous-classe d'une autre classe.

Prenons un exemple rapide du module client Magento 2.

1. préférence

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

Au-dessus du code, lorsque quelqu'un vous demande d'instancier un, Magento\Customer\Api\AddressRepositoryInterfaceil instanciera un objet Magento \ Customer \ Model \ ResourceModel \ AddressRepository (l'attribut type).

La configuration des préférences de classe ne concerne pas uniquement les interfaces, nous pouvons également modifier les classes réelles.

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

Vous pouvez créer la classe 'customModel' pour 'CustomerManagement' et effectuer les modifications. Système de préférence de classe en remplacement du système de réécriture de classe.

http://alanstorm.com/magento_2_object_manager_preferences

2. Arguments

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

Dans le code ci-dessus, nous envoyons un objet comme argument, nous disons système pour insérer la classe "Proxy" en tant qu'objet avec le nom de groupManagement. En outre, nous pouvons également utiliser des arguments pour remplacer l'argument existant.

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>

Dans le code ci-dessus, public function clean($object)dans la classe visiteur est appelé après la fonction publique afterClean(Visitor $subject, $logResourceModel)qui est dans la classe Log.

4 types virtuels

La création d'un type virtuel est un peu comme la création d'une sous-classe pour une classe existante.

Pour plus de détails, veuillez consulter les exemples pratiques que j'ai mentionnés sous la forme de liens d'Alan. En vous entraînant, vous pourrez acquérir une expérience plus claire.

J'espère que cela t'aides.... :)

Krishna ijjada
la source
1
avez-vous une idée de la configuration définie avec ifconfig dans di.xml pour activer / désactiver le processus du module? si vous à ce sujet, veuillez m'aider à résoudre le problème.
Kartik Asodariya
Information très utile.
Shivam
2
Comment apprend-on tout ça?
Mohammed Joraid
Donc, la <préférence> au lieu d'appeler la classe dans "pour", elle appelle la classe dans "type" ou quelque chose? je suis toujours confus à ce sujet. @@
fudu
3
oh nvm, j'ai trouvé cette très bonne réponse ici. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu