如何防止Yii2中的行为引起保存

时间:2018-06-27 16:27:00

标签: php 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);
    }
}

1 个答案:

答案 0 :(得分:4)

在Yii2中,您需要使用ModelEvent的{​​{3}}属性。

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

这在isValid中有解释。