Как я могу установить значения конфигурации в Magento 2?

12

Ранее (то есть в Magento 1, то есть) мы создали модуль под названием Setup, который содержал настройки для сайта. Сценарии обновления выглядят примерно так:

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

Я не могу понять, как сделать выше в M2.

Другими словами: как мне настроить данные конфигурации в M2?

Мартин Викман
источник
2
зачем вам это нужно в БД? Вы не можете просто добавить его в config.xmlфайл?
Мариус
Вот так все и делается. Кажется, это общий подход к обработке настроек в расширениях модулей (по крайней мере, в M1). Кроме того, они должны обрабатываться в зависимости от версии, чтобы их можно было перенести при обновлении нашего модуля.
Мартин Уикман,

Ответы:

15

Это похоже на работу:

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
Я думаю, что может также работать (и быть чище) использовать интерфейс из DI в конструкторе для объекта $ resourceConfig. \Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Вот так
Привет, Мартин, можешь поделиться с тобой еще модулем? Я борюсь за то, какое пространство имен и т. Д. Мне нужно использовать ?!
Клетцеб
почему вы также добавили регистратор? просто привычка или?
Оззи
6

Можно использовать следующий интерфейс \Magento\Framework\App\Config\Storage\WriterInterface, он имеет 2 метода:

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

Это более высокий уровень по сравнению с \Magento\Config\Model\ResourceModel\Configи должен использоваться из клиентского кода.

Алекс Палиаруш
источник