您的位置:首页 > 编程语言 > PHP开发

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

2017-04-27 11:38 579 查看
作为一个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:解决


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐