yii2->验证码问题(Yii2.0 ajax验证,验证码报错,load方法)

版权声明:本文非博主原创文章,原文链接http://www.dodobook.net/php/2290。 https://blog.csdn.net/gc258_2767_qq/article/details/70847441

作为一个yii2新手来说,对于验证码真是又爱又恨,框架自带的验证码解决了自写验证码的烦恼,然而还是有些小问题。

需求:登陆输入:用户名、密码、验证码

弹框登录+ajax验证


1、LoginForm.php(跟大多数人加验证码的方式一致)

public function rules()
    {
        return [
            [['userID', 'password'], 'required'],
            ['password', 'validatePassword'],
            ['code','captcha','captchaAction'=>'site/captcha']
        ];
    }

2、页面(ActiveForm   enableAjaxValidation和id是异步提交必不可少的,validationUrl异步验证的方法

因为是弹框登录,From中的验证和提交url,是分开写的。

<?php
                    $form = ActiveForm::begin([
                                'id' => 'login-form',
                                'enableAjaxValidation' => true,
                                'enableClientValidation' => true, //开启客户端验证,生成js 
                                'validationUrl' => Url::toRoute(['validate-form']),
                    ]);
                    ?>


 
 

 3、控制器 
 

// 看主要的验证操作,该操作是表单字段失去焦点时异步验证,同时如果直接提交表单,也会先执行该操作进行验证
    public function actionValidateForm() {
        if(Yii::$app->request->isAjax&&isset($_POST['ajax'])){
        
        $model = new LoginForm();   //这里要替换成自己的模型类
        $model->load(Yii::$app->request->post());
        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $errors=\yii\bootstrap\ActiveForm::validate($model,array('userID','password'));
            if(sizeof($errors)>0){
                return $errors;
            }
            return true;
        }

之前存在的问题:

1、弹框登录,ajax异步提交。

解决方法:ActiveForm里面添加 

'enableAjaxValidation' => true,
'validationUrl' => Url::toRoute(['validate-form']),

2、可以在弹出的登陆框里面验证数据,But验证码输入正确,依然会提示错误。

错误原因ActiveForm::validate的验证我指定了验证字段,因为如果验证所有的,那验证码将会出问题,因为每次验证后都会生成新的验证码。

解决方法思路就是这里的数据校验只验证 密码 名字。验证码的校验交给yii来做。 (ps:照搬别人的^~^),

so:解决


 

猜你喜欢

转载自blog.csdn.net/gc258_2767_qq/article/details/70847441
今日推荐