WEB-ASTRA.RU

Использование настроек конфигурации из базы данных

Иногда при разработке приложения появляется необходимость использовать настройки конфигурации из таблицы базы данных. Например, настройки доступов для отправки email через smtp-сервер. Настройки будут редактироваться через раздел в админке.

Для работы с настройками создадим класс Settings. Так как мы его будем использовать для получения значений в конфигах, нам нужно создать объект подключения к базе данных. Это можно сделать в конструкторе класса Settings.

private $db;

public function __construct()
{
  $config = require(__DIR__ . '/../config/db.php');
  $this->db = Yii::createObject($config);
}

Далее необходим метод для получения значения настройки. Если такой настройки не будет, то значение берется из файла .env

public function getSettingsValue($key): string
{
  $value = $this->db->createCommand("SELECT value FROM setting WHERE setting.key = '$key'")->queryOne();
  return !empty($value['value']) ? trim($value['value']) : env('APP_VARIABLE');
}

В файле конфигурации config/web.php получаем настройки. Подключаем класс

use app\setting\Setting;

Получаем значение необходимой настройки

$setting = new Setting();
$config['components']['mailer'] = [
  'smtpHost' => $setting->getSettingValue('smtpHost'),
];

Добавить комментарий:

Комментарии:

Комментариев пока нет, но вы можете оставить первый