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?

Martin Wickman
quelle
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();
    }   
}
Martin Wickman
quelle
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.

Alex Paliarush
quelle