Magento 2 - Como ler os valores em etc / config.xml?

8

Como definir e ler os valores etc/config.xmlem um módulo personalizado?
Qual é a melhor prática para usá-lo?

Paulo
fonte
O que exatamente você quer fazer? Coloque no contexto.
André Ferraz

Respostas:

12

Você não pode ler os valores diretamente de etc/config.xml.
Quero dizer, você pode, mas não faz sentido ler diretamente a partir daí, pois os valores podem ser substituídos na seção stores-> configuration que torna o valor config.xmlinútil.
Em vez disso, você pode ler a configuração global mesclada e, se o valor não for sobrescrito na seção de configuração, você obtém o valor config.xml.

E você pode fazer isso adicionando uma dependência à sua classe que precisa ler o valor da configuração assim:

espaço para nome Your \ Namespace \ Here;

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

Então você pode ler o valor da configuração como este

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

Ou, se for um sinal de sim / não e você desejar obter um true/falsevalor, faça o seguinte:

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

$pathrepresenta todas as tags concatenadas por slash ( /) até o seu valor (semelhante a M1).

Para defini-los, config.xmlvocê precisa adicioná-lo ao seu arquivo

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

Usando o código acima,

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

retornará 1e

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

retornará true.

Marius
fonte
Obrigado. Eu tentei e fiz um exemplo. github.com/zzpaul/magento2-module-custom-config-demo
Paul