2015-10-19 51 views
4

我想在新用戶註冊時發送電子郵件給管理員。我認爲我可以用兩種方法做到這一點。一種方法是使用事件,其他方法是使用afterSave。 通過使用活動 控制器代碼afterSave和yii2中的事件之間的區別?

public function actionCreate() 
    { 
     $model = new Registeration(); 

     if ($model->load(Yii::$app->request->post())) 
     { 
      if($model->save()) 
      { 
       $model->trigger(Registeration::EVENT_NEW_USER); 
      } 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 

型號代碼

const EVENT_NEW_USER = 'new-user'; 
public function init(){ 

    $this->on(self::EVENT_NEW_USER, [$this, 'sendMail']); 

} 

public function sendMail($event){ 
    // code 
} 

我可以用afterSave方法做同樣的

型號代碼

public function afterSave($insert) 
{ 
    //code 
    return parent::afterSave($insert); 
} 

那麼,有什麼區別在。。之間 兩種方法?哪一個更好使用EventsafterSave()

+2

從你的代碼的Registeration事件將在afterSave事件後調用;),但額外的事件處理的編碼風格是更好的,因爲你可以從延長你沒有附加事件的模型類。 – BHoft

+0

@BHoft是註冊事件將在$ model-> save();之後被調用。是從我的部分PLZ解釋錯誤 – Bloodhound

+2

沒有兩個是「正確的」,但您的附加事件是更好的編碼風格爲未來的目的。因此添加新事件是更好的解決方案。 – BHoft

回答

4

我是Yii的新手,

這取決於你想要實現什麼。

當您使用afterSave電子郵件時也會發送更新。

因此,事件將是您的問題更好的選擇。

感謝&問候

保羅·P埃利亞斯

+0

$ insert - 如果爲false,則表示在更新記錄時調用該方法。 從[官方文檔](http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#afterSave()-detail) – musafar006

相關問題