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?

Martin Wickman
sumber
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();
    }   
}
Martin Wickman
sumber
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.

Alex Paliarush
sumber