Magento 2 - Làm thế nào để đọc các giá trị trong etc / config.xml?


8

Làm thế nào để xác định và đọc các giá trị etc/config.xmltrong một mô-đun tùy chỉnh?
Thực hành tốt nhất để sử dụng nó là gì?


chính xác là bạn muốn làm gì? Đặt nó trong bối cảnh.
André Ferraz

Câu trả lời:


12

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.xmlvô 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/falsegiá 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.xmlbạ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

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

sẽ trở lại true.


Cảm ơn. Tôi đã thử và làm một ví dụ. github.com/zzpaul/magento2-module-custom-config-demo
Paul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.