Ответы:
Вы не можете читать значения непосредственно из 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
.