Yii2 注册账号时 账号输入框自动判断里面的内容是否已存在? [ 2.0 版本 ]
在Yii/frontend/web下的注册页面可以同时该账号已存在
model里面代码是:
['username', 'trim'],
['username', 'required'],
['username', 'unique', 'targetClass' => '\common\models\User', 'message' => '这个用户名已经被采取。'],
['username', 'string', 'min' => 6, 'max' => 16],
这个原理是在\common\models\User
里面,但我照着他的写没反应,请问这个原理的意思是怎样实现的?
pengzz33 补充于 2016-10-08 14:38
它是怎样调用\common\models\User里面的东西进行判断的?
最佳答案
-
- 首先你的 User model 是对应着一张数据表的。
- 然后你为 username 这个字段声明了 unique 这个验证器。
- 最后你会想到原理是 unique 去数据表中查询了一番,不然怎敢说 username 是存在的。
当然,你发现了当你输入用户名密码并且点击提交按钮获取用户名存在的提示时,页面几乎原封不动。这很有趣。但这和验证用户名唯一是没有关系的,这其中大多数是ActiveForm的功劳。
至于你照着写却没反应,这涉及到了非常之多。不好猜测。
不过建议你参考下这篇 http://www.yiichina.com/tutorial/965 去花费 30 秒完成YII2的登录注册然后观察其注册完整流程,这会很有帮助的。
其他 2 个回答
-
有一种是当你输入完名字之后,直接判断是否存在。(不是说点了注册才开始判断)
那么这种做法是,开启
ActiveForm
的enableAjaxValidation
<?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
注册时间:2016-10-31
最后登录:1970-01-01
在线时长:0小时0分
最后登录:1970-01-01
在线时长:0小时0分
- 粉丝1
- 金钱165
- 威望0
- 积分165