Настройка параметров почтовой программы из модели — Yii2

Я использую Yii2 и я хочу настроить параметры почтовой программы, получая данные из БД.

Пример:

'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'enableSwiftMailerLogging' =>true,
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => $model->getSmtpHost(),
'username' => $model->getSmtpUser(),
'password' => $model->getSmtpPass(),
'port' => $model->getSmtpPort(),
'encryption' => $model->getSmtpEncryption(),
],
]

но из web.php не могу вызвать методы из моделей, я пытался, но выдает ошибку

0

Решение

Yii инициализировал приложение из этого конфига. Вы не можете использовать yii2 до запуска yii2.

$application = new yii\web\Application($config);

В качестве альтернативы вы можете настроить почтовую программу после создания приложения в файле bootstrap.php следующим образом: Yii::$app->set('mailer', (new MailerConfigurator())->getConfig());

2

Другие решения

спасибо @ Onedev.Link и @arogachev за его ответ, который дал мне идею, и я решил проблему.

я решаю проблему modyfing компонент swiftmailer, в Mailer.php добавил это:

use app\models\Administracion; //The model i needed for access bd
class Mailer extends BaseMailer
{
...
...
//this parameter is for the config (web.php)
public $CustomMailerConfig = false;
...
...
...
/**
* Creates Swift mailer instance.
* @return \Swift_Mailer mailer instance.
*/
protected function createSwiftMailer()
{
if ($this->CustomMailerConfig) {
$model = new Administracion();

$this->setTransport([
'class' => 'Swift_SmtpTransport',
'host' => $model->getSmtpHost(),
'username' => $model->getSmtpUser(),
'password' => $model->getSmtpPass(),
'port' => $model->getSmtpPort(),
'encryption' => $model->getSmtpEncryption(),
]);
}

return \Swift_Mailer::newInstance($this->getTransport());
}

И в Web.php добавил это:

'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'enableSwiftMailerLogging' =>true,
'CustomMailerConfig' => true, //if its true use the bd config else set the transport here
'useFileTransport' => false,
],
1

По вопросам рекламы [email protected]