Come posso impostare i valori di configurazione in Magento 2?


12

In precedenza (in Magento 1, cioè) abbiamo creato un modulo chiamato Setup che conteneva le impostazioni per il sito. Gli script di aggiornamento sono simili al seguente:

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

Non riesco a capire come fare sopra in M2.

In altre parole: come posso impostare i dati di configurazione in M2?


2
perché hai bisogno di questi nel DB? Non puoi semplicemente aggiungerlo nel config.xmlfile?
Marius

È così che vanno le cose. Sembra essere l'approccio comune alla gestione delle impostazioni nelle estensioni dei moduli (almeno in M1). Inoltre, devono essere gestiti in base alla versione in modo che possano essere migrati quando il nostro modulo viene aggiornato.
Martin Wickman,

Risposte:


15

Questo sembra funzionare:

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
Penso che possa anche funzionare (ed essere più pulito) usare l'interfaccia di DI nel costruttore per l'oggetto $ resourceConfig. In questo modo:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin,

Ehi Martin, puoi condividere un po 'di più del tuo modulo? Sto lottando in quale spazio dei nomi ecc. Devo usare ?!
Klettseb,

perché hai aggiunto anche il logger? solo un'abitudine o?
OZZIE,

6

È possibile utilizzare la seguente interfaccia \Magento\Framework\App\Config\Storage\WriterInterface, ha 2 metodi:

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

È più di alto livello rispetto a \Magento\Config\Model\ResourceModel\Config, e dovrebbe essere usato dal codice client.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.