Magento 2 - Bagaimana cara membaca nilai di etc / config.xml?

8

Bagaimana cara mendefinisikan dan membaca nilai-nilai di etc/config.xmldalam modul khusus?
Apa praktik terbaik untuk menggunakannya?

Paul
sumber
Apa yang sebenarnya ingin Anda lakukan? Letakkan dalam konteks.
André Ferraz

Jawaban:

12

Anda tidak dapat membaca nilai langsung dari etc/config.xml.
Maksud saya, Anda bisa, tetapi tidak ada gunanya membaca langsung dari sana karena nilai dapat ditimpa dari bagian konfigurasi store-> yang membuat nilai dari config.xmltidak berguna.
Sebagai gantinya, Anda dapat membaca dari konfigurasi gabungan global dan jika nilainya tidak ditimpa di bagian konfigurasi Anda mendapatkan nilainya config.xml.

Dan Anda bisa melakukannya dengan menambahkan dependensi ke kelas Anda yang perlu membaca nilai konfigurasi seperti ini:

namespace Your \ Namespace \ Here;

class YourClassName
{
    protected $scopeConfig;
    public function __construct(
        ....
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        ....
    ) {
        ....
        $this->scopeConfig = $scopeConfig;
        ....
    }
}

Maka Anda dapat membaca nilai konfigurasi seperti ini

$path = 'path/to/value';
$value = $this->scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);

Atau, jika itu adalah tanda ya / tidak dan Anda ingin mendapatkan true/falsenilai, Anda dapat melakukannya seperti ini:

$flag = $this->scopeConfig->isSetFlag($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);

$pathmewakili semua tag yang diakhiri dengan garis miring ( /) hingga nilai Anda (mirip dengan M1).

Untuk mendefinisikannya, config.xmlAnda perlu menambahkan ini di file Anda

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default><--! reserved word -->
        <section><!-- anything goes here -->
            <group><!-- anything goes here -->
                <value1>1</value1><!-- anything goes here -->
                <value2>some text</value2><!-- anything goes here -->
            </group>
        </section>
    </default>
</config>

Menggunakan kode di atas,

$value = $this->scopeConfig->getValue('section/group/value1', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);  

akan kembali 1dan

$value = $this->scopeConfig->isSetFlag('section/group/value1', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);  

akan kembali true.

Marius
sumber
Terima kasih. Saya sudah mencoba dan membuat contoh. github.com/zzpaul/magento2-module-custom-config-demo
Paul