Szenario: Ich bin ein Magento 2-Modulentwickler. Ich möchte eine Konfigurationsdatei in erstellen app/etc
. Ich möchte, dass diese Datei nach Bereich "abgegrenzt" wird
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
In Magento 1 würde ich einfach eine erstellen config.xml
und mich auf den Weg machen. Der Bereichsbereich wurde in der XML-Datei selbst festgelegt. Magento 2 geht dies jedoch ganz anders an
Welche Klassendateien sollte ich in Magento 2 zum Lesen dieser Konfigurationsdateien mit Gültigkeitsbereich erstellen? Aus der Magento 2-Quelle ist nicht klar, wie dies "richtig" gemacht wird. Der Kerncode verwendet mehrere Ansätze, und keiner von ihnen ist mit einer @api
Methode gekennzeichnet. Dies macht es schwierig zu wissen, wie mit dieser allgemeinen Modulentwickleraufgabe verfahren werden soll. Als sekundärer Nebeneffekt ist es auch schwierig zu wissen, wie ein Magento-Modulentwickler aus den Kernkonfigurationsdateien lesen sollte .
Einerseits scheint es "richtig" zu sein, ein Dateisystem-Leseobjekt zu erstellen. Zum Beispiel scheint Magento die import.xml
Datei wie folgt zu laden
#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
);
}
//...
}
Die Basisklasse Magento\Framework\Config\Reader\Filesystem
scheint Code zum Auflösen des Bereichsbereichs zu haben.
Allerdings scheinen einige der Magento - Konfigurationsdateien , dieses Muster zu vermeiden. Zwar gibt es Lesegeräte für diese Dateien ( event.xml
in diesem Beispiel)
vendor/magento/framework/Event/Config/Reader.php
Es gibt auch "Scoped Data" -Klassen, die diese Reader verwenden.
#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);
}
}
Dies lässt den Anschein erwecken, dass die Leserklassen mit Gültigkeitsbereich das sind, was ein Modulentwickler erstellen sollte. Aber nicht alle Konfigurationsdateien haben Lesegeräte mit diesem Gültigkeitsbereich.
Gibt es einen klaren Weg für Magento 2-Modulentwickler? Oder ist dies nur etwas, was Magento 2-Modulentwickler auf ihre eigene Art angehen sollten, und das daraus resultierende Chaos / Nicht-Standard-Konfigurations-Laden sind nur die Kosten für das Geschäft?
Die offizielle Dokumentation deckt einige der verfügbaren Klassen gut ab, aber nichts, was mit der Tatsache vereinbar ist, dass es keine eindeutigen Richtlinien dafür gibt, welche konkrete Implementierung wir verwenden sollen, oder ob erwartet wird, dass jedes Modul entscheidet, wie dies zu tun ist besitzen.