Як я можу встановити значення конфігурації в 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
Ось так

Ей, Мартіне, ти можеш поділитися ще трохи свого модуля? Я борюся за те, який простір імен і т. Д. Мені потрібно використовувати ?!
Клетцебл

чому ви також додали реєстратор? просто звичка чи?
OZZIE

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і повинен використовуватися з коду клієнта.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.