Senaryo: Ben bir Magento 2 modülü geliştiricisiyim. İçinde bir yapılandırma dosyası oluşturmak istiyorum app/etc
. Bu dosyanın alana göre "kapsamlandırılmasını" istiyorum
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
Magento 1'de sadece bir tane oluşturup config.xml
yola koyulurdum. Alan kapsamı XML dosyasının kendisinde gerçekleşti. Ancak, Magento 2 buna çok farklı yaklaşıyor
Magento 2'de, bu kapsamlı yapılandırma dosyalarını okumak için hangi sınıf dosyalarını oluşturmalıyım? Magento 2 kaynağından bunu yapmanın "doğru" yolunun ne olduğu açık değildir. Çekirdek kod birden fazla yaklaşım benimser ve hiçbiri bir @api
yöntemle işaretlenmez . Bu, bu ortak modül geliştirici görevine nasıl devam edileceğini bilmeyi zorlaştırır. İkincil bir yan etki olarak, bir Magento modülü geliştiricisinin çekirdek yapılandırma dosyalarından nasıl okuması gerektiğini de zorlaştırır .
Bir yandan, yapılacak doğru şey bir dosya sistemi okuyucu nesnesi oluşturmak gibi görünüyor. Örneğin, Magento import.xml
dosyayı aşağıdaki gibi yüklüyor
#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
);
}
//...
}
Temel Magento\Framework\Config\Reader\Filesystem
sınıf, alan kapsamını çözümlemek için koda sahip gibi görünüyor.
Ancak , Magento yapılandırma dosyalarından bazıları bu kalıbı kullanmıyor gibi görünüyor. Bu dosyalar için okuyucular bulunurken (event.xml
bu örnekte)
vendor/magento/framework/Event/Config/Reader.php
Bu okuyucuları kullanan "kapsamlı veri" sınıfları da vardır .
#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);
}
}
Bu, bir modül geliştiricisinin yaratması gereken kapsamlı okuyucu sınıfları gibi görünmesini sağlar. Ancak tüm yapılandırma dosyalarında bu kapsamlı okuyucular yoktur.
Magento 2 modülü geliştiricilerinin izleyeceği açık bir yol var mı? Yoksa bu sadece Magento 2 modül geliştiricilerinin kendi yöntemleriyle yaklaşmaları gereken bir şey mi ve ortaya çıkan kaos / standart dışı konfigürasyon-yükleme sadece iş yapmanın maliyeti mi?
Resmi belgeler mevcut sınıfların bazı kapsayan iyi bir iş, ama aslında uzlaştıran şey somut uygulama biz kullanımına varsayalım konum hangi net bir kılavuz vardır, ya beklenti ise her modül bu konuda nasıl karar verir onun kendi.