Magento 2: Запись и чтение настроек из БД
Часто требуется хранить некоторые настройки в базе Magento 2. Сделать это можно различными способами, сегодня рассмотрим ка это делать используя таблицу core_config_data.
Структура таблицы настроек
Таблица core_config_data - дефолтная таблица Magento, служащая для хранения разнообразных настроек. Имеет такую структуру:
1 2 3 4 5 6 7 8 9 |
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 = значение настройки
Пример записи
1 2 3 4 5 6 7 |
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\Framework\App\Config\Storage\WriteInterface
Для считывания настроек используется интерфейс: \Magento\Framework\App\Config\ScopeConfigInterface
Пример записи настроек
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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; } } |
Пример чтения настроек
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 не так уж и сложно.
Author: | Tags: /
| Rating:
Leave a Reply