如何在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中)处理设置的常用方法。此外,还需要基于版本进行处理,以便在我们的模块升级时可以进行迁移。
Martin Wickman

Answers:


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
埃尔韦Guétin

嗨,马丁,您可以共享更多模块吗?我在需要使用什么名称空间等方面挣扎?
Klettseb '16

为什么还要添加记录器?只是一个习惯还是?
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,它更高级,应该在客户端代码中使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.