Как подключить настройки swift_smtptransport в config из БД в yii2?

Добрый вечер.
Есть некий компонент, который сохраняет настройки для сайта в базе данных. В любом месте приложения, чтобы получить любую из настроек сайта я использую этот компонент(в данном случае email администратора):
Yii::$app->siteSettigns->get('SITE.ADMIN_ADDRESS');

Теперь требуется сохранить в базе настройки для "Swift_SmtpTransport". Сейчас они жёстко вписаны в файле config/web.php
'mailer' => [
            'useFileTransport' => true,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'mail.test.com',
                'port' => '25',
                'username' => 'regist@teset.com',
                'password' => '123456',
                //'encryption' => 'ssl'
            ]
        ],

Использование компонента прямо в файле конфигурации приведёт к ошибке, например:
'host' => Yii::$app->siteSettings->get('SITE.HOST_MAIL'),

Как использовать данные из базы в файле конфигурации?
  • Вопрос задан
  • 831 просмотр
Решения вопроса 1
slo_nik
@slo_nik Автор вопроса, куратор тега Yii
Решение оказалось простейшим, подсказал как сделать ElisDN(Дмитрий)
Вот решение, всё работает:
'mailer' => function(){
          return Yii::createObject([
              'class' => 'yii\swiftmailer\Mailer',
              'useFileTransport' => false,
              'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => Yii::$app->siteSettings->get('SITE.HOST_MAIL'),
                'port' => Yii::$app->siteSettings->get('SITE.HOST_PORT'),
                'username' => Yii::$app->siteSettings->get('SITE.HOST_USER'),
                'password' => Yii::$app->siteSettings->get('SITE.HOST_PASS'),
                //'encryption' => 'ssl'
              ]
          ]);
        },

Благодарю yiiworld и Boris Korobkov за советы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov
Web developer
Из конфига еще нельзя обращаться к БД, потому что еще не загружен конфиг БД и не подключены необходимые классы.
Тогда в конфиге указывайте пустые строки, а потом отдельно (где именно - это другой вопрос) сделайте запрос к БД и данные запишите в конфиг Yii::$app->modules['mailer']['transport']
Ответ написан
@yiiworld
Есть такой модуль
yii2-config
Можно актуальные настройки хранить в массиве, и актуализировать их в БД
yii config/rescan
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы