Magento 2 - Wie lese ich die Werte in etc / config.xml?

8

Wie definiere und lese ich die Werte etc/config.xmlin einem benutzerdefinierten Modul ein?
Was ist die beste Vorgehensweise, um es zu verwenden?

Paul
quelle
Was genau möchten Sie tun? Stellen Sie es in einen Kontext.
André Ferraz

Antworten:

12

Sie können die Werte nicht direkt von lesen etc/config.xml.
Ich meine, Sie können, aber es macht keinen Sinn, direkt von dort zu lesen, da die Werte möglicherweise aus dem Abschnitt store-> configuration überschrieben werden, wodurch der Wert config.xmlunbrauchbar wird.
Stattdessen können Sie aus der global zusammengeführten Konfiguration lesen. Wenn der Wert im Konfigurationsabschnitt nicht überschrieben wird, erhalten Sie den Wert von config.xml.

Und Sie können dies tun, indem Sie Ihrer Klasse eine Abhängigkeit hinzufügen, die den Konfigurationswert wie folgt lesen muss:

Namespace Ihr \ Namespace \ Here;

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

Dann können Sie den Konfigurationswert wie folgt lesen

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

Oder wenn es sich um ein Ja / Nein-Flag handelt und Sie einen true/falseWert erhalten möchten, können Sie dies folgendermaßen tun:

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

$pathrepräsentiert alle von slash ( /) verketteten Tags bis zu Ihrem Wert (ähnlich wie M1).

Um sie in zu definieren, müssen config.xmlSie dies in Ihre Datei einfügen

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

Verwenden Sie den obigen Code,

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

wird zurückkehren 1und

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

wird zurückkehren true.

Marius
quelle
Vielen Dank. Ich habe versucht und ein Beispiel gemacht. github.com/zzpaul/magento2-module-custom-config-demo
Paul