Налаштування Magento 2 використовуються Менеджер об'єктів Magento 2 для розширення реалізації за замовчуванням. Ви можете використовувати налаштування в Magento 2 для реалізації деяких інтерфейсів або для переписування/перевизначення існуючих класів PHP та їхніх методів.

У цій статті ви дізнаєтесь, як це зробити, та знайдете корисні приклади, які допоможуть вам на цьому шляху.

Перевизначення класів у Magento 2

Якщо ви хочете переписати існуючі методи класу з налаштуваннями Magento, виконайте наведені нижче дії:

1. Створіть тощо/di.xml файл у вашій папці розширень:

app/code/MyCompany/ModuleName/etc/di.xml 

2. Додайте до нього цей код:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\Block\Onepage\Success" type="MyCompany\ModuleName\Block\Onepage\Success" />
</config>

Використати атрибут "дляу "перевага" для визначення класу PHP, який потрібно перевизначити. Використовуйте атрибут "тип" щоб визначити PHP-клас, який буде використовуватися замість оригінального.

3. Створіть новий PHP-файл:

app/code/MyCompany/ModuleName/Block/Onepage/Success.php

з класом МояКомпанія\НазваМодуля\Блок\ОднаСторінка\Успіх:

<?php
namespace MyCompany\ModuleName\Block\Onepage;

class Success extends \Magento\Checkout\Block\Onepage\Success
{
   // new code here
}

3. Збережіть зміни та скомпілюйте впровадження залежностей за допомогою команди CLI:

bin/magento setup:di:compile

Переконайтеся, що команда виконана без помилок.

Важливе зауваження: Переписування існуючих класів не рекомендується, оскільки це часто призводить до конфліктів. Конфлікти часто виникали в Magento 1 і досі відбуваються в Magento 2.

Отже, якщо ви все ще хочете використовувати налаштування Magento 2 для перевизначення класів, вам потрібен Детектор конфліктів , який допоможе вам виявити конфлікти класів.

Модуль Magento 2 Conflict Detector

Однак, якщо це можливо, ви можете використовувати спостерігачі або плагіни в Magento для зміни логіки існуючих класів замість налаштувань Magento.

Реалізація інтерфейсу

Щоб реалізувати інтерфейс у Magento 2, наприклад, інтерфейс вашого нового репозиторію, вам потрібно:

1. Створіть тощо/di.xml файл у вашому розширенні Magento.

2. Вкажіть Налаштування для Інтерфейс таТип класу, який реалізуватиме інтерфейс, як у прикладі:

<?xml version="1.0"?>
<config>
<preference for="MyCompany\ModuleName\Api\MyEntityRepositoryInterface" type="MyCompany\ModuleName\Model\MyEntityRepository" />
</config>

3. Створити Модель/MyEntityRepository.php з кодом

<?php
namespace MyCompany\ModuleName\Model;

use MyCompany\ModuleName\Api\MyEntityRepositoryInterface;

class MyEntityRepository implements MyEntityRepositoryInterface
{
   // class code here
}

4. Збережіть зміни та скомпілюйте впровадження залежностей за допомогою команди CLI:

bin/magento setup:di:compile