YII2 Ajax验证用户名唯一性,邮箱唯一性

 模型中设置相关规则,是可以进行唯一性验证的,具体办法请看:

视图signup.php代码:

<?phpuse yii\helpers\Html;use yii\bootstrap\ActiveForm;/* @var $this yii\web\View *//* @var $form yii\bootstrap\ActiveForm *//* @var $model \frontend\models\SignupForm */$this->title = '注册';$this->params['breadcrumbs'][] = $this->title;?><div class="site-signup">
    <h1><?= Html::encode($this->title) ?></h1>

    <p>Please fill out the following fields to signup:</p>

    <div class="row">
        <div class="col-lg-5">
            <?php $form = ActiveForm::begin([
                'id' => 'form-signup',
                'enableAjaxValidation' => true,
                'enableClientValidation' => true,
            ]); ?>
                
                <?= $form->field($model, 'username') ?>
                <?= $form->field($model, 'email') ?>
                <?= $form->field($model, 'password')->passwordInput() ?>
                <?= $form->field($model, 'password_compare')->passwordInput() ?>
                
                <div class="form-group">
                    <?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?>
                </div>
                
            <?php ActiveForm::end(); ?>
        </div>
    </div>
</div>

控制器SiteController.php

    public function actionSignup()
    {        $model = new SignupForm();        
        $model->load($_POST);        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;            return \yii\bootstrap\ActiveForm::validate($model);
        }        
        if ($model->load(Yii::$app->request->post())) {            if ($user = $model->signup()) {                if (Yii::$app->getUser()->login($user)) {                    return $this->goHome();
                }
            }
        }        return $this->render('signup', [            'model' => $model,
        ]);
    }

模型SignupForm.php

use common\models\User;use yii\base\Model;use Yii;/**
 * Signup form
 */class SignupForm extends Model{    public $username;    public $email;    public $password;    public $password_compare;    /**
     * @inheritdoc
     */
    public function rules()
    {        return [
            ['username', 'filter', 'filter' => 'trim'],
            ['username', 'required'],
            ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => '用户名已存在.'],
            ['username', 'string', 'min' => 2, 'max' => 255],

            ['email', 'filter', 'filter' => 'trim'],
            ['email', 'required'],
            ['email', 'email'],
            ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => '邮箱名已存在.'],

            [['password', 'password_compare'], 'required'],
            [['password', 'password_compare'], 'string', 'min' => 6, 'max' => 16, 'message' => '{attribute}是6-16位数字或字母'],
            ['password_compare', 'compare', 'compareAttribute' => 'password', 'message' => '两次密码不一致'],
        ];
    }    /**
     * Signs user up.
     *
     * @return User|null the saved model or null if saving fails
     */
    public function signup()
    {        if ($this->validate()) {            $user = new User();            $user->username = $this->username;            $user->email = $this->email;            $user->setPassword($this->password);            $user->generateAuthKey();            if ($user->save()) {                return $user;
            }
        }        return null;
    }
}

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://tranfer.cn/?id=28