X

Magento 2: Запись и чтение настроек из БД

Часто требуется хранить некоторые настройки в базе Magento 2. Сделать это можно различными способами, сегодня рассмотрим ка это делать используя таблицу core_config_data.

Структура таблицы настроек

Таблица core_config_data - дефолтная таблица Magento, служащая для хранения разнообразных настроек. Имеет такую структуру:

core_config_data
------------------------
config_id    unsigned int(10), Auto Increment
scope        varchar(8)
scope_id     int(11)
path         varchar(255)
value        text

Рассмотрим, за что отвечает каждое из начений:

  • config_id = первичный ключ, простой uint номер записи
  • scope = область действия: default, websites, stores
  • scope_id = числовое id области действия
  • path = путь настройки (хотя более подходит "название настройки")
  • value = значение настройки

Пример записи

config_id = 29
scope = default
scope_id = 0
path = general/country/default
value = US

Трудностей с пониманием полей думаю нет.

Возможно новичкам не будет понятно что такое scope, поэтому объясню в двух словах.
Т.к. одна и та же установка Magento может обслуживать несколько интернет магазинов (websites) и витрин (stores), то для настроек используется иерархия в виде областей действий которые переопределяют друг друга. У нас есть три дефолтные области действия: default, websites, stores.

  • default - Настройка по-умолчанию
  • website - Настройка заданная в скоуп в скоупе website переопределяет значения заданные в default
  • stores - Настройка заданная в скоупе store переопределяет значения заданные в default и website

Соответственно с помощью изменения этих настроек вы можете объявить глобальное значение настройки, потом переопределить ее для одного из доменов, и затем переопределить ее для одной из витрин.

Magento Scope

Чтение и запись

Вернемся к коду и рассмотрим как можно сохранять и считывать настройки.

Для сохранение настроек в БД используется интерфейс: \Magento\Framework\App\Config\Storage\WriteInterface

Для считывания настроек используется интерфейс: \Magento\Framework\App\Config\ScopeConfigInterface

Пример записи настроек

class WriteConfig
{
    protected $_storeManager;
    protected $_configWriter;
 
    public function __construct(
        \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
        \Magento\Store\Model\StoreManagerInterface $storeManager
    ){
        $this->_configWriter = $configWriter;
        $this->_storeManager = $storeManager;
    }
 
    public function setConfig($value)
    {
        // для всех сайтов
        $websites = $this->_storeManager->getWebsites();
        $scope = "websites"; // указываем scope
        foreach($websites as $website) {
            // сохраняем настройку
            $this->_configWriter->save(
                'my_section/something/configvaluename', // имя настройки
                $value, // значение настройки
                $scope, // область действия
                $website->getId()
            );
        }
 
        return $this;
    }
}

Пример чтения настроек

class ReadConfig
{
    protected $_scopeConfig;
 
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
    ){
        $this->_scopeConfig = $scopeConfig;
        parent::__construct($context);
    }
 
    public function getConfig() {
        return $this->_scopeConfig->getValue(
            "my_section/something/configvaluename", // название настройки
            "websites" // область действия
        );
    }
}

Заключение

Как видите, читать и сохранять настройки в базе Magento 2 не так уж и сложно.

Категории: Magento
Тэги: configmagento 2