是啊俊 2017-08-01 12:07:00 7732次浏览 1条评论 1 0 0
  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)

  1. 服务器端验证

(1)$model->validate():

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

(2)$model->save():

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

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

  1. 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}:用户输入的值。

您需要登录后才可以评论。登录 | 立即注册