Magento 2 - ¿Cómo leer los valores en etc / config.xml?

8

¿Cómo definir y leer los valores etc/config.xmlen un módulo personalizado?
¿Cuál es la mejor práctica para usarlo?

Pablo
fuente
¿Qué es exactamente lo que quiere hacer? Ponlo en contexto.
André Ferraz el

Respuestas:

12

No puede leer los valores directamente desde etc/config.xml.
Quiero decir, puedes hacerlo, pero no tiene sentido leer directamente desde allí, ya que los valores pueden sobrescribirse desde la sección de configuración de tiendas-> que hace que el valor sea config.xmlinútil.
En su lugar, puede leer la configuración combinada global y, si el valor no se sobrescribe en la sección de configuración, obtendrá el valor config.xml.

Y puede hacerlo agregando una dependencia a su clase que necesita leer el valor de configuración de esta manera:

espacio de nombres Su \ Espacio de nombres \ Aquí;

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

Entonces puedes leer el valor de configuración de esta manera

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

O, si es un indicador de sí / no y desea obtener un true/falsevalor, puede hacerlo así:

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

$pathrepresenta todas las etiquetas concatenadas por slash ( /) hasta su valor (similar a M1).

Para definirlos config.xml, debe agregar esto en su archivo

<?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 el código anterior,

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

volverá 1y

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

devolverá true.

Marius
fuente
Gracias. He intentado e hice un ejemplo. github.com/zzpaul/magento2-module-custom-config-demo
Paul