Skenario: Saya seorang pengembang modul Magento 2. Saya ingin membuat file konfigurasi di app/etc
. Saya ingin file ini "dibatasi" berdasarkan area
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
Di Magento 1 saya baru saja membuat config.xml
dan berada di jalan saya. Pelingkupan area terjadi di file XML itu sendiri. Namun, Magento 2 melakukan pendekatan yang sangat berbeda
Di Magento 2, file kelas apa yang harus saya buat untuk membaca file konfigurasi tercakup ini. Tidak jelas dari sumber Magento 2 apa "cara yang tepat" untuk melakukan ini. Kode inti mengambil banyak pendekatan, dan tidak ada satupun yang ditandai dengan @api
metode. Ini membuatnya sulit untuk mengetahui bagaimana melanjutkan dengan tugas pengembang modul umum ini. Sebagai efek samping sekunder, juga menyulitkan untuk mengetahui bagaimana pengembang modul Magento harus membaca dari file konfigurasi inti.
Di satu sisi, sepertinya "yang benar" yang harus dilakukan adalah membuat objek pembaca sistem file. Misalnya, Magento tampaknya memuat import.xml
file dengan yang berikut ini
#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
);
}
//...
}
Kelas dasar Magento\Framework\Config\Reader\Filesystem
sepertinya memiliki kode untuk menyelesaikan cakupan area.
Namun beberapa file konfigurasi Magento tampaknya menghindari pola ini. Meskipun ada pembaca untuk file-file ini ( event.xml
dalam contoh ini)
vendor/magento/framework/Event/Config/Reader.php
Ada juga kelas "data cakupan" yang menggunakan pembaca ini.
#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);
}
}
Ini membuatnya tampak seperti kelas pembaca dengan cakupan adalah apa yang harus dibuat oleh pengembang modul. Tetapi tidak semua file konfigurasi memiliki pembaca scoped ini.
Apakah ada jalur yang jelas untuk diikuti oleh pengembang modul Magento 2? Atau apakah ini hanya sesuatu yang harus didekati oleh pengembang modul Magento 2 dengan caranya sendiri, dan kekacauan / non-standar-konfigurasi-pembebanan yang dihasilkan hanyalah biaya untuk melakukan bisnis?
The dokumentasi resmi melakukan pekerjaan yang baik yang meliputi beberapa kelas yang tersedia, tapi tidak ada yang mendamaikan fakta tidak ada panduan yang jelas di mana implementasi konkret kita kira untuk digunakan, atau jika harapan adalah setiap modul memutuskan bagaimana melakukan ini pada nya sendiri.