布衣風古 2017-10-06 15:34:04 7437次浏览 2条评论 5 4 0

微信截图_20171006152605.png

注册时不用提交就验证用户名、邮箱等是否已将存在,用Ajax实现

  1. 首先,先在Form表中开启Ajax
        ...
     <?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>
        ...
    
  2. 其次,再_对应的_Controller加入一段Ajax验证的代码

        ...
     if ($model->load(Yii::$app->request->post())) {
    
             if (Yii::$app->request->isAjax) {
                 Yii::$app->response->format = Response::FORMAT_JSON;
    
                 return ActiveForm::validate($model);
             } //ajax提交过来的会直接进行验证
        ...
    
  3. 最后,再对应的models里面增加验证的rules
        ...
     ['username', 'unique', 'targetClass' => '\backend\models\User', 'message' => '用户名已存在.'],
     //targetClass目标模型类(这个不能照抄,要结合你项目注册新用户时的模型类)
     ['email', 'unique', 'targetClass' => '\backend\models\User', 'message' => '邮箱已存在.'],
        ...
    

貌似三者缺一都会失效,网上的教材要么只给第二步,要么只提供第三步,着实让新手有点困惑。

为此,小白我总结研究了下,希望可以帮助对此有困惑的人

首次发帖,希望对有需要的人有帮助,欢迎大神们指正

觉得很赞
  • 评论于 2019-07-19 09:50 举报

    没效果!检查了好几篇!

  • 评论于 2017-11-11 22:20 举报

    自己扩展一下unique验证类即可,我是通过重写了所有验证类的client函数,前台验证用的jquery.validate.js,把yii的前端验证方法整合进了jquery.validate.js,并且自定义了很多验证器,扩展后的unique会自动通过ajax调后后台验证器验证。

您需要登录后才可以评论。登录 | 立即注册