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
なぜDBでこれらが必要なのですか?config.xmlファイルに追加することはできませんか?
マリウス

それがまさに物事が行われる方法です。これは、モジュール拡張の設定を処理する一般的なアプローチのようです(少なくともM1では)。また、モジュールをアップグレードするときに移行できるように、バージョンごとに処理する必要があります。
Martin Wickman

回答:


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
$ resourceConfigオブジェクトのコンストラクターでDIからのインターフェイスを使用することも機能する(そしてクリーンになる)と思います。このように:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
エルヴェゲタン

ちょっとマーティン、モジュールをもう少し共有できますか?私は使用する必要がある名前空間などに苦労していますか?!
Klettseb

なぜロガーも追加したのですか?ただの癖ですか?
OZZIE 2018年

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であり、クライアントコードから使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.