Сценарій: Я розробник модулів Magento 2. Я хочу створити файл конфігурації в app/etc
. Я хочу, щоб цей файл був "розміщений" за областями
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
У Magento 1 я просто створив config.xml
та буду на своєму шляху. Оцінка області відбулася в самому файлі XML. Однак Magento 2 підходить до цього дуже по-різному
У Magento 2, які файли класів потрібно створити для читання цих файлів конфігурації. З джерела Magento 2 незрозуміло, який "правильний" спосіб це зробити. Основний код має декілька підходів, і жоден з них не позначений @api
методом. Це ускладнює знання про те, як діяти з цим загальним завданням для розробників модулів. В якості другорядного побічного ефекту також важко знати, як розробник модулів Magento повинен читати з основних файлів конфігурації.
З одного боку, здається, що "правильне", що потрібно зробити, це створити об'єкт зчитування файлової системи. Наприклад, Magento, здається, завантажує import.xml
файл із наступним
#File: vendor/magento/module-import-export/Model/Import/Config/Reader.php
namespace Magento\ImportExport\Model\Import\Config;
class Reader extends \Magento\Framework\Config\Reader\Filesystem
{
public function __construct(
//...
$fileName = 'import.xml',
//...
) {
parent::__construct(
$fileResolver,
$converter,
$schemaLocator,
$validationState,
$fileName,
$idAttributes,
$domDocumentClass,
$defaultScope
);
}
//...
}
Базовий Magento\Framework\Config\Reader\Filesystem
клас виглядає так, що він має код для вирішення області області.
Однак деякі конфігураційні файли Magento, схоже, уникають цього шаблону. Хоча для цих файлів є читачі ( event.xml
у цьому прикладі)
vendor/magento/framework/Event/Config/Reader.php
Існують також класи "набору даних", які використовують ці читачі.
#File: vendor/magento/framework/Event/Config/Data.php
class Data extends \Magento\Framework\Config\Data\Scoped
{
public function __construct(
\Magento\Framework\Event\Config\Reader $reader,
//...
) {
parent::__construct($reader, $configScope, $cache, $cacheId);
}
}
Таким чином, здається, що класи для читання обчислювачів - це те, що повинен створити розробник модулів. Але не у всіх файлах конфігурації є ці зчитувачі.
Чи існує чіткий шлях, яким слід дотримуватися розробників модулів Magento 2? Або це лише щось, що розробники модулів Magento 2 повинні підходити по-своєму, і отриманий хаос / завантаження нестандартної конфігурації - це лише вартість ведення бізнесу?
Офіційна документація , робить хорошу роботу по покриттю деяких з доступних класів, але нічого такого , що примиряє той факт , що немає чітких вказівок , за якими конкретної реалізація , ми припускаємо використання, або якщо очікування кожен модуль вирішує , як зробити це на його власний.