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

时间:2016-01-14 16:05:22

标签: validation yii2

我使用两个字段“old_password”和“new_password”。如果两个字段中的值相同,我想要错误消息。 我没有使用Activerecords。 我试过模特:

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

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

2 个答案:

答案 0 :(得分:2)

您需要使用compare验证程序而不是唯一验证程序。

['new_password', 'compare', 'compareAttribute' => 'old_password', 'operator' => '!='],

因为唯一验证器验证属性值在整个表中是唯一的

答案 1 :(得分:0)

如果您的模型扩展为yii \ base \ Model,则不需要activeRecerd,您可以使用规则函数

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

}

用于分配验证规则

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

$model = new \app\models\YourForm();

与建议的in Yii2 guide for validating input

类似
// 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;
}