Câu trả lời:
Bạn không thể đọc các giá trị trực tiếp từ etc/config.xml
.
Ý tôi là, bạn có thể, nhưng không có điểm nào để đọc trực tiếp từ đó vì các giá trị có thể được ghi đè từ phần cửa hàng-> cấu hình làm cho giá trị từ config.xml
vô dụng.
Thay vào đó, bạn có thể đọc từ cấu hình được hợp nhất toàn cầu và nếu giá trị không bị ghi đè trong phần cấu hình, bạn sẽ nhận được giá trị từ đó config.xml
.
Và bạn có thể làm điều đó bằng cách thêm một phụ thuộc vào lớp của bạn cần đọc giá trị cấu hình như thế này:
không gian tên Your \ Namespace \ Here;
class YourClassName
{
protected $scopeConfig;
public function __construct(
....
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
....
) {
....
$this->scopeConfig = $scopeConfig;
....
}
}
Sau đó, bạn có thể đọc giá trị cấu hình như thế này
$path = 'path/to/value';
$value = $this->scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
Hoặc, nếu đó là cờ có / không và bạn muốn nhận true/false
giá trị, bạn có thể làm như thế này:
$flag = $this->scopeConfig->isSetFlag($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
$path
đại diện cho tất cả các thẻ được nối bằng dấu gạch chéo ( /
) cho đến giá trị của bạn (tương tự như M1).
Để xác định chúng trong config.xml
bạn cần thêm nó vào tập tin của bạn
<?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>
Sử dụng mã ở trên,
$value = $this->scopeConfig->getValue('section/group/value1', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
sẽ trở lại 1
và
$value = $this->scopeConfig->isSetFlag('section/group/value1', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
sẽ trở lại true
.