yii2数据验证

Posted 编程人,在天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2数据验证相关的知识,希望对你有一定的参考价值。

1. 客户端验证

yii根据ARrules()中的验证规则生成相应的javascript验证代码。通过设置参数enableClientValidation的值来决定是否启用

客户端验证,默认为true,有以下3种方法来设置该参数的值。

1)在视图文件ActiveForm中对整个form进行设置:

<?php $form = ActiveForm::begin([

    ‘enableClientValidation‘ =>true

]); ?>

(2)在视图文件ActiveField中对单个field进行设置:

<?= $form->field($model, ‘username‘, [‘enableClientValidation‘=>false])->label(‘用户名‘) ?>

3)在AR类的rules()函数中设置:

[‘username‘, ‘yii\validators\StringValidator‘, ‘min‘ => 3, ‘max‘ => 30, ‘enableClientValidation‘ => true, ‘on‘ => ‘register‘]

优先级:(2>1>3

 

2. 服务器端验证

1$model->validate()

根据rules()中定义的验证规则对所有数据进行验证,验证通过返回true,否则返回false并在页面上显示错误信息。

2$model->save()

默认调用$model->validate(),验证通过则直接进行数据库操作,返回true,否则不进行数据库操作,返回false,将错误

信息存储在$model->errors中。若已调用$model->validate(),可以通过传参避免在save()方法中重复验证数据:$model->save(false)

 

3. Ajax验证

通过设置参数enableAjaxValidation的值来决定是否启用ajax验证,默认为false

客户端设置(两种方法):

1)在视图文件ActiveForm中对整个form进行设置:

<?php $form = ActiveForm::begin([

    ‘enableAjaxValidation‘ =>true

]); ?>

2)在视图文件ActiveField中对单个field进行设置:

<?= $form->field($model, ‘username‘, [‘enableAjaxValidation‘=>false])->label(‘用户名‘) ?>

服务器端处理:

if(Yii::$app->request->isAjax) {

        $res = \yii\bootstrap\ActiveForm::validate($model);

        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

        return $res;

}

 

注:有些规则无法使用客户端验证,如uniqueexist等。

 

rules()验证规则的错误信息中引用属性标签名以及用户输入的值:

[‘username‘, ‘unique‘, ‘on‘ => ‘register‘, ‘message‘ => ‘{attribute}"{value}"已被占用!‘]

{attribute}:属性标签名称;{value}:用户输入的值。

 

以上是关于yii2数据验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 mockeryBuilder() 在没有数据库的情况下测试 Yii2 中的存在验证器

Yii2,自定义验证:clientValidateAttribute() 无法正常工作

yii2验证无效

yii2中添加验证码的实现方法

Yii2.0中(Hash is invalid error)验证错误

Yii2.0 rules常用验证规则