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?


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();
    }   
}

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.