我用書面(默認),如驗證之前或之前刪除事件觸發事件。這是一個例子,爲什麼這樣的事情是好的。
試想一下,你有一些用戶。有些用戶(例如管理員)可以編輯其他用戶。但是你想確保遵循特定的規則(讓我們看看這個: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
}
你看過http://www.yiiframework.com/doc-2.0/guide-concept-events.html –
是這並沒有幫助我。 – soju
@soju我回答了你的問題嗎? :) –