Magento 2 - Comment lire les valeurs dans etc / config.xml?

8

Comment définir et lire les valeurs etc/config.xmldans un module personnalisé?
Quelle est la meilleure pratique pour l'utiliser?

Paul
la source
Que veux-tu faire exactement? Mettez-le en contexte.
André Ferraz

Réponses:

12

Vous ne pouvez pas lire les valeurs directement depuis etc/config.xml.
Je veux dire, vous pouvez, mais cela ne sert à rien de lire directement à partir de là, car les valeurs peuvent être écrasées dans la section de configuration stores-> qui rend la valeur config.xmlinutile.
Au lieu de cela, vous pouvez lire à partir de la configuration globale fusionnée et si la valeur n'est pas remplacée dans la section de configuration, vous obtenez la valeur config.xml.

Et vous pouvez le faire en ajoutant une dépendance à votre classe qui doit lire la valeur de configuration comme ceci:

namespace Your \ Namespace \ Here;

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

Ensuite, vous pouvez lire la valeur de configuration comme ceci

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

Ou, si c'est un drapeau oui / non et que vous voulez obtenir une true/falsevaleur, vous pouvez le faire comme ceci:

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

$pathreprésente toutes les balises concaténées par slash ( /) jusqu'à votre valeur (similaire à M1).

Pour les définir, config.xmlvous devez l'ajouter dans votre fichier

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

En utilisant le code ci-dessus,

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

reviendra 1et

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

reviendra true.

Marius
la source
Merci. J'ai essayé et fait un exemple. github.com/zzpaul/magento2-module-custom-config-demo
Paul