Jak ustawić wartości konfiguracji w Magento 2?

12

Wcześniej (czyli w Magento 1) stworzyliśmy moduł o nazwie Setup, który zawierał ustawienia dla strony. Skrypty aktualizacji wyglądają mniej więcej tak:

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

Nie mogę wymyślić, jak to zrobić w M2.

Innymi słowy: jak mogę ustawić dane konfiguracyjne w M2?

Martin Wickman
źródło
2
dlaczego potrzebujesz ich w DB? Nie możesz po prostu dodać tego do config.xmlpliku?
Marius
Tak właśnie się robi. Wydaje się, że są to wspólne ustawienia obsługi podejścia w rozszerzeniach modułów (przynajmniej w M1). Ponadto należy je obsługiwać w zależności od wersji, aby można je było migrować po aktualizacji naszego modułu.
Martin Wickman,

Odpowiedzi:

15

To wydaje się działać:

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
źródło
1
Myślę, że może również działać (i być czystsze) użycie interfejsu z DI w konstruktorze dla obiektu $ resourceConfig. W ten sposób:\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resourceConfig
Hervé Guétin
Hej Martin, możesz udostępnić trochę więcej swojego modułu? Mam problem z tym, jakiej przestrzeni nazw itp. Muszę użyć ?!
Klettseb
dlaczego również dodałeś rejestrator? tylko nawyk czy?
OZZIE
6

Można użyć następującego interfejsu \Magento\Framework\App\Config\Storage\WriterInterface, ma on 2 metody:

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

Jest bardziej wysokopoziomowy w porównaniu do \Magento\Config\Model\ResourceModel\Configi powinien być używany z kodu klienta.

Alex Paliarush
źródło