2017-01-07 53 views
4

努力學習Yii中2賽事澄清我發現了一些資源。我得到更多關注的鏈接在這裏。需要在活動YII2

How to use events in yii2?

在第一個評論本身,他用一個例子解釋。說一個例子,我們在註冊後有10件事要做 - 事件在這種情況下非常方便。

調用該函數是一個大問題?同樣的事情模型init方法裏面發生的事情:

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

我的問題是什麼是使用事件的意義呢?我應該如何充分利用它們。請注意,這個問題純粹是學習Yii 2的一部分。請用一個例子來解釋。提前致謝。

+0

你看過http://www.yiiframework.com/doc-2.0/guide-concept-events.html –

+0

是這並沒有幫助我。 – soju

+0

@soju我回答了你的問題嗎? :) –

回答

8

我用書面(默認),如驗證之前或之前刪除事件觸發事件。這是一個例子,爲什麼這樣的事情是好的。

試想一下,你有一些用戶。有些用戶(例如管理員)可以編輯其他用戶。但是你想確保遵循特定的規則(讓我們看看這個:Only main administrator can create new users and main administrator cannot be deleted)。那麼你可以做的是使用這些書面的默認事件。

User模型(假設User模型保存所有用戶),你可以寫init()和您在init()定義的所有其他方法:

public function init() 
{ 
    $this->on(self::EVENT_BEFORE_DELETE, [$this, 'deletionProcess']); 
    $this->on(self::EVENT_BEFORE_INSERT, [$this, 'insertionProcess']); 
    parent::init(); 
} 

public function deletionProcess() 
{ 
    // Operations that are handled before deleting user, for example: 
    if ($this->id == 1) { 
     throw new HttpException('You cannot delete main administrator!'); 
    } 
} 

public function insertionProcess() 
{ 
    // Operations that are handled before inserting new row, for example: 
    if (Yii::$app->user->identity->id != 1) { 
     throw new HttpException('Only the main administrator can create new users!'); 
    } 
} 

常量像self::EVENT_BEFORE_DELETE已經定義,顧名思義,這在刪除行之前觸發一個。

現在,在任何控制器,我們可以寫觸發這兩個事件的例子:

public function actionIndex() 
{ 
    $model = new User(); 
    $model->scenario = User::SCENARIO_INSERT; 
    $model->name = "Paul"; 
    $model->save(); // `EVENT_BEFORE_INSERT` will be triggered 

    $model2 = User::findOne(2); 
    $model2->delete(); // `EVENT_BEFORE_DELETE` will be trigerred 
    // Something else 
} 
+0

很好的例子。謝謝你edvin。 – soju