YII2 验证检查两个字段之间唯一,不使用活动记录



我正在使用两个字段"old_password"和"new_password"。如果两个字段中的值相同,我想要错误消息。我没有使用活动记录。我在模型中尝试过:

['a1', 'unique', 'targetAttribute' => 'a2']

但上面的代码仅适用于活动记录。如何在不使用活动记录的情况下收到错误消息?

您需要使用比较验证器而不是唯一。

['new_password', 'compare', 'compareAttribute' => 'old_password', 'operator' => '!='],
因为唯一验证

程序验证属性值在整个表中是否唯一

如果你的模型扩展了 yii\base\Model,activeRecerd 不是必需的,你可以使用 rules 函数

public function rules()
{
    return [ 
      ['a1', 'unique', 'targetAttribute' => 'a2'],
    ];
}

用于分配验证规则

在控制器中,您可以调用$model验证执行验证>验证

$model = new appmodelsYourForm();

就像 Yii2 指南中建议的用于验证输入一样

// populate model attributes with user inputs
$model->load(Yii::$app->request->post());
// which is equivalent to the following:
// $model->attributes = Yii::$app->request->post('ContactForm');
if ($model->validate()) {
    // all inputs are valid
 } else {
   // validation failed: $errors is an array containing error messages
  $errors = $model->errors;
}

最新更新