Magento 2 - В каком случае я использую di.xml и Как использовать di.xml для модуля?

12

В Magento 2, какой случай я использую di.xmlи как использовать di.xmlдля модуля?

Кто-нибудь знал, пожалуйста, покажите мне шаг за шагом.

MrTo-Kane
источник
2
Вы можете получить больше информации на официальном сайте magento
Суреш Чикани

Ответы:

53

What case We use di.xml ?

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

Давайте рассмотрим пример из клиентского модуля Magento 2.

1.Preference

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

Выше кода, когда кто-то просит вас создать экземпляр, Magento\Customer\Api\AddressRepositoryInterfaceон будет создавать экземпляр объекта Magento \ Customer \ Model \ ResourceModel \ AddressRepository (атрибут type).

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

<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>

В приведенном выше коде мы отправляем объект в качестве аргумента, мы говорим, что система вставляет класс «Proxy» как объект с именем 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)в классе посетителя вызывается после публичной функции, afterClean(Visitor $subject, $logResourceModel)которая находится в классе журнала.

4 виртуальных типа

Создание виртуального типа похоже на создание подкласса для существующего класса.

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

Надеюсь это поможет.... :)

Кришна иджада
источник
1
Есть ли у вас какие-либо идеи о конфигурации набора с ifconfig в di.xml для включения / выключения процесса модуля? если вы об этом, пожалуйста, помогите мне решить проблему.
Картик Асодария
Очень полезная информация
Шивам
2
Как кто-то изучает все эти вещи?
Мохаммед Джорайд
Таким образом, <preference> вместо вызова класса в «for», это вызов класса в «type» или что-то еще? Я все еще смущаюсь по этому поводу. @@
fudu
3
о нвм, я нашел этот действительно хороший ответ здесь. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu