首页 > 解决方案 > 如何防止保存 Yii2 中的行为

问题描述

我想在我的几个 Yii2 模型中保存之前添加一个检查。

在 Yii1 中,这只是添加一个具有 beforeSave 方法的行为的情况,该方法返回 false。

这在 Yii2 中不起作用。我可以注册一个在保存之前调用的行为,但是从中返回 false 并不会阻止该保存。

任何人都知道如何实现这一点,而不必在我的所有模型中复制具有相同代码的 beforeSave 方法?

namespace app\components\behaviors;

use yii\base\Behavior;
use yii\db\ActiveRecord;

class PreventSaveBehavior extends Behavior
{

    public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_INSERT => 'beforeSave',
            ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeSave',
        ];
    }

    public function beforeSave($insert)
    {
        if (SomeClass::shouldWePreventSave()) {
            return false;
        }

        return parent::beforeSave($insert);
    }
}

标签: phpyii2

解决方案


在 Yii2 的行为中,您需要使用isValid.ModelEvent

public function beforeSave($event)
{
    if (SomeClass::shouldWePreventSave()) {
        $event->isValid = false;
    }
}

这在事件文档中进行了解释。


推荐阅读