Php 如何防止在Yii2中保存行为

Php 如何防止在Yii2中保存行为,php,yii2,Php,Yii2,我想在保存我的几个Yii2型号之前添加一个检查 在Yii1中,这只是添加一个行为的一个例子,该行为具有beforeSave方法,该方法返回false 这在Yii2中不起作用。我可以注册一个在保存之前调用的行为,但是从中返回false并不能阻止保存 有人知道如何实现这一点,而不必在我所有的模型中使用相同的代码复制beforeSave方法吗 namespace app\components\behaviors; use yii\base\Behavior; use yii\db\ActiveRec

我想在保存我的几个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);
    }
}

在行为中的Yii2中,您需要使用
modeleevent
的属性

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

这在Yii2中的

中进行了解释,在行为中,您需要使用
modeleevent的属性

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

这已在中解释。

啊,太好了,谢谢。与Yii1相比,这是一个很大的变化,我仍然试图以相同的方式使用“beforeSave”,正如其他示例所示。啊,很好,谢谢。与Yii1相比,这是一个很大的变化,我仍然试图以相同的方式使用“beforeSave”,正如其他示例所示。