У Magento 2, який випадок я використовую di.xml
та як використовувати di.xml
для модуля?
Хто-небудь знав, будь ласка, покажіть мені крок за кроком.
У Magento 2, який випадок я використовую di.xml
та як використовувати di.xml
для модуля?
Хто-небудь знав, будь ласка, покажіть мені крок за кроком.
Відповіді:
What case We use di.xml ?
Візьмемо короткий приклад із клієнтського модуля 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 віртуальні типи
Створення віртуального типу подібне до створення підкласу для існуючого класу.
Для отримання додаткової уваги, будь ласка, перегляньте практичні приклади, які я згадав як посилання від Алана, на практиці ви можете отримати більш чіткий досвід.
Сподіваюся, це допомагає .... :)