Yii2.0 ajax验证,验证码报错,load方法

来源:互联网 发布:淘宝土特产店铺介绍 编辑:程序博客网 时间:2024/06/03 20:27

Yii2.0刚上手,边学边用。简单说下自己的功能需求。
用户注册 字段:手机号码,验证码,密码,名字。验证用的model的rule验证,ajax验证。
问题1:手机号码唯一 不能重复…..

//验证属性    public function rules(){        return [            [['telnumber','verifyCode','password','name'],'required'],            ['telnumber','match','pattern'=>'/^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/','message'=>'手机号码格式错误。'],            ['telnumber','unique','targetClass'=>'\app\commands\models\Member','message'=>'该手机号码已经注册。'],            ['password','string','min'=>6,'max'=>18],            ['name','string','min'=>2,'max'=>6],            ['verifyCode', 'captcha','captchaAction'=>'/member/captcha'],        ];    }

这里需要注意的是要写明:targetClass对应到验证类的model。
From中的验证和提交url,我是分开写的。

<?php $form = ActiveForm::begin(['id' => 'righster-form','enableAjaxValidation' => true,'enableClientValidation' => true,'validationUrl'=>'checkreg']); ?>

单独指定了验证的url,对应的验证方法一定要有返回值,如果没有返回值没有结果响应

//用户注册检查    public function actionCheckreg()    {        if(Yii::$app->request->isAjax&&isset($_POST['ajax'])){            $model = new RegisterForm();            //给model填充数据            $model->load(Yii::$app->request->post());            //设置返回数据格式为json格式            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;            $errors=\yii\bootstrap\ActiveForm::validate($model,array('telnumber','password','name'));            if(sizeof($errors)>0){                return $errors;            }            return true;        }    }

上面的验证方法用的是Form的验证,因为如果用Model的验证将错误信息return的时候 因为id属性与form的无法对应 所以不能正常显示。ActiveForm::validate的验证我指定了验证字段,因为如果验证所有的,那验证码将会出问题,因为每次验证后都会生成新的验证码。思路就是这里的数据校验只验证手机号码 密码 名字。验证码的校验交给yii来做。
2.load方法的使用
post提交的数据load给Model,是数据model而不是form表单model。
如果直接将form表单load POST数据 会填充失败返回false。
原因:form表单过来的Post数据 input都带着前缀,所以与数据model的属性列名不一致 导致Load 失败。
解决:在load的时候 指定参数2为提交表单的前缀 就可以Load true了。

$member=new Member();$member->load(Yii::$app->request->post(),'RegisterForm');$member->login_ip=Yii::$app->request->getUserIp();$member->login_date=time();

一边学一边做,进度比较慢。边学变笔记+总结吧。不得不说YII 确实很强大。

1 0
原创粉丝点击