私は、検証前または削除前のような書き込みイベント(デフォルト)をトリガイベントとして使用します。そのようなことが良い理由の例があります。
いくつかのユーザーがいるとします。また、一部のユーザー(管理者など)は他のユーザーを編集できます。しかし、具体的なルールが守られていることを確認したいとします(これを取ろう: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
}
あなたがhttp://www.yiiframework.com/doc-2.0/guide-concept-events.htmlを読みました –
はい私を助けなかった。 – soju
@soju私はあなたの質問に答えましたか? :) –