2016-10-08 14:31:35 4207次浏览 3条回答 0 悬赏 10 金钱

在Yii/frontend/web下的注册页面可以同时该账号已存在
model里面代码是:

['username', 'trim'],
['username', 'required'],
['username', 'unique', 'targetClass' => '\common\models\User', 'message' => '这个用户名已经被采取。'],
['username', 'string', 'min' => 6, 'max' => 16],

这个原理是在\common\models\User里面,但我照着他的写没反应,请问这个原理的意思是怎样实现的?

补充于 2016-10-08 14:38

它是怎样调用\common\models\User里面的东西进行判断的?

最佳答案

  • 飘逸 发布于 2016-10-08 18:48 举报
    1. 首先你的 User model 是对应着一张数据表的。
    2. 然后你为 username 这个字段声明了 unique 这个验证器。
    3. 最后你会想到原理是 unique 去数据表中查询了一番,不然怎敢说 username 是存在的。

    当然,你发现了当你输入用户名密码并且点击提交按钮获取用户名存在的提示时,页面几乎原封不动。这很有趣。但这和验证用户名唯一是没有关系的,这其中大多数是ActiveForm的功劳。

    至于你照着写却没反应,这涉及到了非常之多。不好猜测。

    不过建议你参考下这篇 http://www.yiichina.com/tutorial/965 去花费 30 秒完成YII2的登录注册然后观察其注册完整流程,这会很有帮助的。

  • 回答于 2016-10-08 15:01 举报

    具体去看下验证规则的代码呀。
    在yii目录下是有的,在UniqueValidator.php文件中

    2 条回复
    回复于 2016-10-08 15:05 回复

    大神,请问在哪个文件夹下?

    回复于 2016-10-08 16:31 回复

    文件名都给你了,搜索呀

  • 回答于 2016-11-28 18:24 举报

    有一种是当你输入完名字之后,直接判断是否存在。(不是说点了注册才开始判断)

    那么这种做法是,开启ActiveFormenableAjaxValidation

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

    然后在controller里添加一个ajax验证字段

    $model = new SignupForm();
            if ($model->load(Yii::$app->request->post())) {
                if (Yii::$app->request->isAjax) {
                        Yii::$app->response->format = Response::FORMAT_JSON;
    
                        return ActiveForm::validate($model);
                } //ajax提交过来的会直接进行验证
                if ($user = $model->signup()) {
                    if (Yii::$app->getUser()->login($user)) {
                        return $this->goHome();
                    }
                }
            }
    
            return $this->render('signup', [
                'model' => $model,
            ]);
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
pengzz33
等待激活

pengzz33

注册时间:2016-10-31
最后登录:1970-01-01
在线时长:0小时0分
  • 粉丝1
  • 金钱165
  • 威望0
  • 积分165

热门问题