Làm cách nào tôi có thể đặt giá trị cấu hình trong Magento 2?


12

Trước đây (trong Magento 1, nghĩa là) chúng tôi đã tạo ra một mô-đun có tên là Setup chứa cài đặt cho trang web. Các kịch bản nâng cấp trông giống như thế này:

$installer = $this;
$installer->startSetup();
$installer->setConfigData("fastsimpleimport/general/partial_indexing", 1);
$installer->setConfigData("fastsimpleimport/product/disable_preprocess_images", 1);
$installer->setConfigData('general/country/default', 'GB');
$installer->setConfigData('general/locale/firstday', 1); 
$installer->setConfigData('general/locale/timezone', 'Europe/London');
$installer->setConfigData('general/store_information/merchant_country', 'GB');
$installer->setConfigData('design/header/welcome', 'Enter your value');
$installer->setConfigData('design/head/title_suffix', 'Enter your value');
$installer->setConfigData('currency/options/base', 'GBP');
$installer->setConfigData('currency/options/default', 'GBP');
// ...

Tôi không thể tìm ra cách thực hiện ở trên trong M2.

Nói cách khác: Làm cách nào để cài đặt dữ liệu cấu hình trong M2?


2
Tại sao bạn cần những thứ này trong DB? Bạn có thể chỉ cần thêm nó trong config.xmltập tin?
Marius

Đó chỉ là cách mọi thứ được thực hiện. Nó dường như là các cài đặt xử lý tiếp cận phổ biến trong các phần mở rộng mô-đun (ít nhất là trong M1). Ngoài ra, chúng cần được xử lý trên cơ sở phiên bản để chúng có thể được di chuyển khi mô-đun của chúng tôi được nâng cấp.
Martin Wickman

Câu trả lời:


15

Điều này dường như làm việc:

class InstallData implements InstallDataInterface 
{
    public function __construct(
        LoggerInterface $loggerInterface,
        \Magento\Framework\App\Config\ConfigResource\ConfigInterface  $resourceConfig)
    {
        $this->logger = $loggerInterface;
        $this->resourceConfig = $resourceConfig;
    }        

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $this->resourceConfig->saveConfig(
            'a/b/c', 
            'value', 
            \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT, 
            \Magento\Store\Model\Store::DEFAULT_STORE_ID
        );

        $setup->endSetup();
    }   
}

1
Tôi nghĩ rằng nó cũng có thể hoạt động (và sạch hơn) để sử dụng giao diện từ DI trong hàm tạo cho đối tượng $ resourceConfig. Như thế này:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin

Này Martin, bạn có thể chia sẻ thêm một số mô-đun của bạn? Tôi đang vật lộn trong không gian tên, v.v. tôi cần sử dụng?!
Klettseb

Tại sao bạn cũng thêm logger? chỉ là thói quen hay sao?
OZZIE

6

Giao diện sau có thể được sử dụng \Magento\Framework\App\Config\Storage\WriterInterface, nó có 2 phương thức:

  • save($path, $value, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)
  • delete($path, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)

Nó là cấp cao hơn so với \Magento\Config\Model\ResourceModel\Config, và nên được sử dụng từ mã máy khách.

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.