Bagaimana cara menetapkan nilai konfigurasi di Magento 2?


12

Sebelumnya (di Magento 1, yaitu) kami membuat modul bernama Setup yang berisi pengaturan untuk situs. Skrip upgrade terlihat seperti ini:

$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');
// ...

Saya tidak tahu bagaimana melakukan hal di atas dalam M2.

Dengan kata lain: Bagaimana cara saya mengatur data konfigurasi dalam M2?


2
mengapa Anda membutuhkan ini di DB? Tidak bisakah Anda menambahkannya dalam config.xmlfile?
Marius

Itulah cara dilakukan. Tampaknya menjadi pendekatan penanganan penanganan umum dalam ekstensi modul (setidaknya dalam M1). Juga mereka perlu ditangani berdasarkan versi sehingga mereka dapat dimigrasi ketika modul kami ditingkatkan.
Martin Wickman

Jawaban:


15

Ini sepertinya berhasil:

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
Saya pikir mungkin juga berfungsi (dan lebih bersih) untuk menggunakan antarmuka dari DI dalam konstruktor untuk objek $ resourceConfig. Seperti ini:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin

Hei Martin, dapatkah Anda membagikan lebih banyak lagi modul Anda? Saya sedang berjuang dalam namespace apa dll yang perlu saya gunakan ?!
Klettseb

mengapa Anda menambahkan logger juga? hanya kebiasaan atau?
OZZIE

6

Antarmuka berikut dapat digunakan \Magento\Framework\App\Config\Storage\WriterInterface, memiliki 2 metode:

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

Ini lebih tingkat tinggi dibandingkan dengan \Magento\Config\Model\ResourceModel\Config, dan harus digunakan dari kode klien.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.