Scenariusz: Jestem programistą modułu Magento 2. Chcę utworzyć plik konfiguracyjny w app/etc
. Chcę, aby ten plik miał „zasięg” według obszaru
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
W Magento 1 stworzę i będę na dobrej config.xml
drodze. Określanie zasięgu nastąpiło w samym pliku XML. Jednak Magento 2 podchodzi do tego zupełnie inaczej
Jakie pliki klas należy utworzyć w Magento 2 do odczytu tych plików konfiguracyjnych o zasięgu. Ze źródła Magento 2 nie jest jasne, jaki „właściwy” sposób to zrobić. Kod podstawowy ma wiele podejść i żadne z nich nie jest oznaczone żadną @api
metodą. Utrudnia to ustalenie sposobu wykonywania tego wspólnego zadania programisty modułu. Jako wtórny efekt uboczny utrudnia również ustalenie, jak programista modułu Magento powinien czytać z podstawowych plików konfiguracyjnych.
Z jednej strony wydaje się, że „właściwą” rzeczą jest stworzenie obiektu czytnika systemu plików. Na przykład Magento wydaje się ładować import.xml
plik w następujący sposób
#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
Klasa podstawowa wygląda tak, jakby zawierała kod do rozwiązania zakresu obszaru.
Jednak niektóre pliki konfiguracyjne Magento wydają się unikać tego wzoru. Chociaż istnieją czytniki tych plików ( event.xml
w tym przykładzie)
vendor/magento/framework/Event/Config/Reader.php
Istnieją również klasy danych o zasięgu, które korzystają z tych czytników.
#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);
}
}
To sprawia, że wydaje się, że klasy czytników o zasięgu są tym, co programista powinien stworzyć. Ale nie wszystkie pliki konfiguracyjne mają czytniki o takim zasięgu.
Czy twórcy modułów Magento 2 mają jasną ścieżkę do naśladowania? Czy jest to coś, do czego twórcy modułów Magento 2 powinni podchodzić na swój własny sposób, a wynikający z tego chaos / niestandardowe ładowanie konfiguracji to tylko koszt prowadzenia działalności?
Oficjalna dokumentacja robi dobrą robotę, obejmujących niektóre z dostępnych klas, ale nic, co godzi fakt, że nie ma jasnych wytycznych, na których konkretna realizacja jesteśmy przypuszczać, aby użytku lub gdy oczekuje się, każdy moduł decyduje, jak to zrobić na jego posiadać.