Yii2实用基础学习笔记(四):模型验证

  • 模型的load方法

    模型对象的load方法为模型加载数据,一般地,模型尝试从$_POST搜集用户提交的数据,由Yii的yii\web\Request::post()方法负责搜集。 另外load加载的字段必须在模型的rules方法里,不然也不能赋值。

  • 模型的rules规则

常用验证规则:

1.【safe     不验证规则】
//['字段','safe']
//[['字段1','字段2',……],'safe']

2.【required 不能为空,必须验证】
//['字段','required','message' => '提示信息']
//[['字段1','字段2',……],'required','message' => '提示信息']

3.【compare  对比验证】
//['字段','compare','compareValue'=>'对比的值','message' => '提示信息']
//['字段','compare','compareAttribute'=>'对比的字段','message' => '提示信息']

4.【double   双精度数字验证】
//['字段','double','min'=>'最小值','max' => '最大值','tooSmall'=>'小于最小值提示','tooBig'=>'大于最大值提示','message'=>'提示信息']

5.【email    邮箱规则验证】
//['字段','email','message' => '提示信息']

6.【in       范围验证】
//['字段','in','range'=>['1','2','3',……],'message' => '提示信息']

7.【integer  整型数字验证】
//['字段','integer','message' => '提示信息']

8.【match    正则验证】
//['字段','match','parttern'=>'#正则#','message' => '提示信息']

9.【string   字符串验证】
//['字段','string','min'=>'最小长度','max' => '最大长度','tooShort'=>'小于最小长度提示','tooLong'=>'大于最大长度提示','message'=>'提示信息']

10.【unique  唯一验证】
//['字段','unique','message' => '提示信息']

11.【captcha 验证码验证】
//['字段','captcha','captchaAction',=>'login/captcha','message' => '提示信息']

12.自定义验证
//['字段','自定义方法']
//可通过在自定义方法里调用addError()来定义错误
例:
['username',function($attribute,$params){
    if(满足条件){
        $this->addError($attribute,'提示信息');
    }    
},'params'=>['message'=>'dd']]

更多类型参考类文档 http://www.yiichina.com/doc/api/2.0/yii-validators-validator

在@app\models下创建一个Test命名的模型文件

<?php
namespace app\models;

use yii\base\Model;

class Test extends Model{

    public $username;
    public $password;

    public function rules(){
        return [
            //[['username','password'],'required','message'=>'不能为空']
            ['username','required','message' => '用户名不能为空'],
            ['password','required','message' => '密码不能为空']
        ];
    }
}

在Test控制器新建一个actionValidate操作来测试,通过模型的validate()方法在幕后执行验证操作:

public function actionValidate(){
    //模拟数据,数组的一维必须是相关模型名
    //手动封盖值用于测试
    $data = [
        'Test' => [
            'username' => 'hello',
            'password' => '123321'
        ]
    ];

    $test = new \app\models\Test();
    $test->load($data);
    if($data && $test->validate()){
        echo 'ok';
    }else{
        var_dump($test->errors);
    }
}

可以自构建相应数据来测试所有验证

posted @ 2016-07-07 21:08  CB蜡笔小新  阅读(319)  评论(0)    收藏  举报