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

来源:互联网 发布:解压缩软件安卓版 编辑:程序博客网 时间:2024/06/06 18:47

转发自:http://www.yiichina.com/tutorial/828

  • 模型的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命名的模型文件

<?phpnamespace 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);}/*$test->validate();调用验证器if ($test->hasErrors()) {        // 验证失败    } else {        // 验证成功    }*/}

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