2015-09-10 1 views
0

im используя Yii2, и я хочу настроить параметры почтовой программы, получая данные из db.Конфигурировать параметры почтовой программы от модели - 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

возможно дубликат [приложение Init компонент с конфигурацией из базы данных] (http://stackoverflow.com/questions/28219440/init-application-component-with-config-from-database) – arogachev

ответ

1

благодаря @ Onedev.Link и @arogachev за его answer.that дал мне идею, и я решить проблема.

я решить проблему модифицирующий 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, 
], 
2

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

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

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

+0

Я попробовал это http://stackoverflow.com/questio ns/28219440/init-application-component-with-config-from-database в контроллере, но где вызывается функция i, созданная для установки с запуском приложения? – Cocuba

+0

Это правильный ответ. 'Yii :: $ app-> set()' не запускается новое приложение, просто измените компонент [ServiceLocator] (http://www.yiiframework.com/doc-2.0/guide-concept-service-locator.html) , –

+0

спасибо за ответ, дал мне идею, см. Ниже @ Onedev.Link – Cocuba