Como posso definir valores de configuração no Magento 2?

12

Anteriormente (no Magento 1), criamos um módulo chamado Setup, que continha configurações para o site. Os scripts de atualização são mais ou menos assim:

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

Não consigo descobrir como fazer o acima em M2.

Em outras palavras: Como faço para definir os dados de configuração no M2?

Martin Wickman
fonte
2
por que você precisa deles no banco de dados? Você não pode simplesmente adicioná-lo ao config.xmlarquivo?
Marius
É assim que as coisas são feitas. Parece ser a abordagem comum de manipulação de configurações em extensões de módulo (pelo menos em M1). Além disso, eles precisam ser tratados com base na versão, para que possam ser migrados quando nosso módulo for atualizado.
Martin Wickman

Respostas:

15

Isso parece funcionar:

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
fonte
1
Eu acho que também pode funcionar (e ser mais limpo) usar a interface do DI no construtor para o objeto $ resourceConfig. Assim:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin 26/05
Ei Martin, você pode compartilhar um pouco mais do seu módulo? Estou lutando em qual namespace etc eu preciso usar ?!
Klettseb
por que você adicionou o logger também? apenas um hábito ou?
OZZIE
6

A seguinte interface pode ser usada \Magento\Framework\App\Config\Storage\WriterInterface, possui 2 métodos:

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

É mais de alto nível comparado \Magento\Config\Model\ResourceModel\Confige deve ser usado no código do cliente.

Alex Paliarush
fonte