yii2数据验证 [ 未指定版本 ]
- 客户端验证
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)
- 服务器端验证
(1)$model->validate():
根据rules()中定义的验证规则对所有数据进行验证,验证通过返回true,否则返回false并在页面上显示错误信息。
(2)$model->save():
默认调用$model->validate(),验证通过则直接进行数据库操作,返回true,否则不进行数据库操作,返回false,将错误
信息存储在$model->errors中。若已调用$model->validate(),可以通过传参避免在save()方法中重复验证数据:$model->save(false)。
- 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}:用户输入的值。
是啊俊
最后登录:2018-01-23
在线时长:13小时58分
- 粉丝0
- 金钱785
- 威望20
- 积分1115
共 1 条评论
ok-111