Wie kann ich Konfigurationswerte in Magento 2 einstellen?


12

Zuvor (also in Magento 1) haben wir ein Modul namens Setup erstellt, das Einstellungen für die Site enthielt. Die Upgrade-Skripte sehen ungefähr so ​​aus:

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

Ich kann nicht herausfinden, wie man das oben in M2 macht.

Mit anderen Worten: Wie gehe ich vor, um Konfigurationsdaten in M2 festzulegen?


2
warum brauchst du diese in der DB? Können Sie es nicht einfach in die config.xmlDatei einfügen?
Marius

So werden die Dinge gemacht. Dies scheint der übliche Ansatz für die Behandlung von Modulen in Modulerweiterungen zu sein (zumindest in M1). Außerdem müssen sie auf Versionsbasis behandelt werden, damit sie beim Upgrade unseres Moduls migriert werden können.
Martin Wickman

Antworten:


15

Das scheint zu funktionieren:

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
Ich denke, es könnte auch funktionieren (und sauberer sein), die Schnittstelle von DI im Konstruktor für das $ resourceConfig-Objekt zu verwenden. So:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin

Hey Martin, kannst du noch mehr von deinem Modul teilen? Ich habe Probleme mit dem Namespace usw., den ich verwenden muss?!
Klettseb

Warum haben Sie auch Logger hinzugefügt? nur eine Gewohnheit oder?
OZZIE

6

Die folgende Schnittstelle kann verwendet werden \Magento\Framework\App\Config\Storage\WriterInterface, es gibt 2 Methoden:

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

Es ist höher \Magento\Config\Model\ResourceModel\Configals Client-Code und sollte aus diesem verwendet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.