Dans Magento 2, quel cas utiliser di.xml
et comment utiliser di.xml
pour le module?
Tout le monde le savait, veuillez me montrer étape par étape.
Dans Magento 2, quel cas utiliser di.xml
et comment utiliser di.xml
pour le module?
Tout le monde le savait, veuillez me montrer étape par étape.
Réponses:
What case We use di.xml ?
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\AddressRepositoryInterface
il 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.... :)