2017-01-07 2 views
4

Yiiでイベントを勉強しようとしています。2.私はいくつかのリソースを見つけました。もっと注目を集めているリンクがここにあります。最初のコメント自体にイベントの説明をさらに必要とするYII2

How to use events in yii2?

彼は例を挙げて説明しています。登録後に行うべき10の事柄があるとしましょう。イベントはその状況で便利です。

この関数を呼び出すことは大きな問題ですか?

$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)。次に、これらの書かれたデフォルトイベントを使用することができます。名前が示すようにself::EVENT_BEFORE_DELETEよう

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!'); 
    } 
} 

定数はすでに定義されており、この:Userモデル(Userモデルを仮定すると、すべてのユーザを保持している)あなたはinit()を書いて、あなたがinit()で定義されているすべての追加メソッドができて

1つは行を削除する前にトリガーされます。我々は両方のイベントをトリガーする例を書くことができます任意のコントローラで今

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

偉大な例です。 – soju

関連する問題