Magento 2 - Come leggere i valori in etc / config.xml?


Risposte:


12

Non è possibile leggere i valori direttamente da etc/config.xml.
Voglio dire, puoi, ma non ha senso leggere direttamente da lì poiché i valori possono essere sovrascritti dalla sezione di configurazione negozi-> che rende il valore config.xmlinutile.
Puoi invece leggere dalla configurazione globale unita e se il valore non viene sovrascritto nella sezione di configurazione, ottieni il valore da config.xml.

E puoi farlo aggiungendo una dipendenza alla tua classe che deve leggere il valore di configurazione in questo modo:

namespace Your \ Namespace \ Here;

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

Quindi puoi leggere il valore di configurazione in questo modo

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

Oppure, se è un flag sì / no e vuoi ottenere un true/falsevalore, puoi farlo in questo modo:

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

$pathrappresenta tutti i tag concatenati da slash ( /) fino al tuo valore (simile a M1).

Per definirli in config.xmldevi aggiungere questo nel tuo file

<?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>

Utilizzando il codice sopra,

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

tornerà 1e

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

tornerà true.


Grazie. Ho provato e fatto un esempio. github.com/zzpaul/magento2-module-custom-config-demo
Paul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.