Magento 2 - У якому випадку я використовую di.xml та як використовувати di.xml для модуля?


12

У Magento 2, який випадок я використовую di.xmlта як використовувати di.xmlдля модуля?

Хто-небудь знав, будь ласка, покажіть мені крок за кроком.


2
Більше інформації ви можете отримати з офіційного сайту magento: devdocs.magento.com/guides/v2.0/extension-dev-guide/…
Суреш Чікані

Відповіді:


54

What case We use di.xml ?

  • Ми можемо використовувати di.xml для (переписати) перевагу певного класу.
  • Ми можемо надіслати нові або замінити існуючі аргументи класу .
  • Використовуйте плагіни, щоб виконувати деякі завдання до, після та навколо функції
  • За допомогою virtualTypes створюють підклас іншого класу.

Візьмемо короткий приклад із клієнтського модуля Magento 2.

1.Преференція

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

Вище коду, коли хтось попросить вас примірник, Magento\Customer\Api\AddressRepositoryInterfaceвін створить об'єкт Magento \ Customer \ Model \ ResourceModel \ AddressRepository (атрибут типу).

Конфігурація переваг класу не тільки для інтерфейсів, ми можемо також змінити фактичні класи.

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

Ви можете створити клас "customModel" для "CustomerManagement" та внести зміни. Система уподобань класів як заміна для системи перезапису класів.

http://alanstorm.com/magento_2_object_manager_preferences

2. Аргументи

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

У цьому коді ми надсилаємо об'єкт як аргумент, ми говоримо системі, щоб вставити клас "проксі" як об'єкт з ім'ям groupManagement. Крім того, ми можемо використовувати Аргументи і для заміни існуючого аргументу.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. Плагін

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

У наведеному вище коді public function clean($object)в класі відвідувачів викликається функція public, afterClean(Visitor $subject, $logResourceModel)яка знаходиться в класі Log.

4 віртуальні типи

Створення віртуального типу подібне до створення підкласу для існуючого класу.

Для отримання додаткової уваги, будь ласка, перегляньте практичні приклади, які я згадав як посилання від Алана, на практиці ви можете отримати більш чіткий досвід.

Сподіваюся, це допомагає .... :)


1
Чи маєте ви якесь уявлення про встановлену конфігурацію з ifconfig у di.xml для включення / відключення модульного процесу? якщо ви про це, будь ласка, допоможіть мені вирішити проблему.
Картик Асодарія

Дуже корисна інформація.
Шивам

2
Як хтось вивчає всі ці речі?
Мохаммед Жораїд

Так <преференція> замість називати клас у "за", він називає клас у "типі" чи щось таке? Я все ще плутаю з цього приводу. @@
fudu

3
ой нвм, я знайшов тут справді гарну відповідь. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.