2017-02-06 3 views
0

In meinem Benutzermodell muss ich nach dem Einfügen eines neuen Datensatzes eine E-Mail senden. Ich kann nicht warten, dass E-Mails gesendet werden, weil es zu lange dauert. Also habe ich versucht, Event-Handler in Model selbst zu verwendenFügen Sie den yii2-Ereignishandler in das Modell selbst ein

class User extends ActiveRecord { 
    public function events() 
    { 
     return [ 
      User::EVENT_AFTER_INSERT => [$this, 'sendEmail'] 
     ]; 
    } 
    public function sendEmail(){ 
     Yii::$app->mailer->compose() 
      ->setTo($this->email) 
      ->setFrom(['mail address' => 'name']) 
      ->setSubject('Verify your Email') 
      ->setHtmlBody('<p>Please click on the <a href="'.Yii::$app->request->hostInfo.'/'.Yii::$app->params['frontEndUrl'].'#/verify-email/' 
       .$this->emailToken. 
       '">link</a> to verify your email</p>') 
      ->send(); 
    } 
} 

Aber es funktioniert keine Idee?

Antwort

0

Sie kommen wahrscheinlich von einem Javascript-Hintergrund, aber Ereignisse in PHP funktionieren nicht so (in Javascript tut es). Wenn Sie ein Ereignis auslösen, wird es gefangen, aber nicht in einem neuen Prozess. Selbst wenn es Ihnen gelingt, das zu tun, was Sie wollen, wartet es immer noch darauf, dass die E-Mail versendet wird.

Die Lösung wäre, eine Art von Warteschlange zu verwenden, die einfachste, einfach einen Datensatz in eine "E-Mail" -Tabelle in der DB einfügen und weitermachen. Sie können einen Cronjob haben, der die E-Mail-Tabelle verarbeitet und die eigentlichen E-Mails versendet.

+0

Es ist eine E-Mail-Verifizierung, so kann ich es nicht als CRON-Job festlegen. Gibt es eine andere Methode zum Senden von E-Mails als schnelle Post wie Mandrill? –

+0

Natürlich können Sie es als Cron senden. Was sind die technischen/logischen Überlegungen, warum Sie nicht können? Natürlich können Sie auch Mandrill verwenden, den ich in der Vergangenheit benutzt habe. https://packagist.org/packages/nickcv/yii2 -mandrill –

+0

können Sie mir ein Beispiel für die Einstellung von Cron-Job geben, wie kann ich E-Mails sofort senden, wenn neue Benutzerdatensätze eingefügt werden. –

Verwandte Themen