yii2数据验证
Posted 编程人,在天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2数据验证相关的知识,希望对你有一定的参考价值。
1. 客户端验证
yii根据AR类rules()中的验证规则生成相应的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;
}
注:有些规则无法使用客户端验证,如unique、exist等。
在rules()验证规则的错误信息中引用属性标签名以及用户输入的值:
[‘username‘, ‘unique‘, ‘on‘ => ‘register‘, ‘message‘ => ‘{attribute}"{value}"已被占用!‘]
{attribute}:属性标签名称;{value}:用户输入的值。
以上是关于yii2数据验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 mockeryBuilder() 在没有数据库的情况下测试 Yii2 中的存在验证器
Yii2,自定义验证:clientValidateAttribute() 无法正常工作