Comment puis-je définir des valeurs de configuration dans Magento 2?

12

Auparavant (dans Magento 1, c'est-à-dire), nous avons créé un module appelé Configuration qui contenait les paramètres du site. Les scripts de mise à niveau ressemblent à ceci:

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

Je ne peux pas comprendre comment faire ce qui précède en M2.

En d'autres termes: comment procéder pour définir des données de configuration dans M2?

Martin Wickman
la source
2
pourquoi en avez-vous besoin dans la BD? Ne pouvez-vous pas simplement l'ajouter dans le config.xmlfichier?
Marius
C'est comme ça que les choses se font. Il semble que ce soit l'approche courante de gestion des paramètres dans les extensions de module (au moins dans M1). Ils doivent également être traités sur une base de version afin qu'ils puissent être migrés lorsque notre module est mis à niveau.
Martin Wickman

Réponses:

15

Cela semble fonctionner:

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
la source
1
Je pense que cela peut également fonctionner (et être plus propre) pour utiliser l'interface de DI dans le constructeur de l'objet $ resourceConfig. Comme ça:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin
Hey Martin, pouvez-vous partager un peu plus de votre module? Je me bats dans quel espace de noms, etc. que je dois utiliser?!
Klettseb
pourquoi avez-vous également ajouté un enregistreur? juste une habitude ou?
OZZIE
6

L'interface suivante peut être utilisée \Magento\Framework\App\Config\Storage\WriterInterface, elle a 2 méthodes:

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

Il est plus \Magento\Config\Model\ResourceModel\Configavancé que le code client et doit être utilisé à partir de celui-ci.

Alex Paliarush
la source