Magento 2 - Как прочитать значения в etc / config.xml?

8

Как определить и прочитать значения в etc/config.xmlпользовательском модуле?
Как лучше всего его использовать?

Павел
источник
Что именно вы хотите сделать? Поместите это в контекст.
Андре Ферраз

Ответы:

12

Вы не можете читать значения непосредственно из etc/config.xml.
Я имею в виду, вы можете, но нет смысла читать прямо оттуда, так как значения могут быть перезаписаны из раздела stores-> configuration, что делает значение config.xmlбесполезным.
Вместо этого вы можете читать из глобальной объединенной конфигурации, и если значение не перезаписывается в разделе конфигурации, вы получаете значение config.xml.

И вы можете сделать это, добавив в ваш класс зависимость, которая должна прочитать значение config следующим образом:

namespace Your \ Namespace \ Here;

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

Тогда вы можете прочитать значение конфигурации, как это

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

Или, если это флаг да / нет, и вы хотите получить true/falseзначение, вы можете сделать это следующим образом:

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

$pathпредставляет все теги, объединенные с помощью slash ( /) до вашего значения (аналогично M1).

Чтобы определить их config.xmlнужно добавить это в свой файл

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

Используя код выше,

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

вернется 1и

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

вернется true.

Мариус
источник
Спасибо. Я попробовал и сделал пример. github.com/zzpaul/magento2-module-custom-config-demo
Пол