• YII2.0中实现高级注册


    如何在不修改逻辑代码的情况下完美解决以上三个问题?看了下面的教程,一目了然!

    以高级版2.0.6为例,打开/frontend/models/SignupForm.php

    class SignupForm extends Model
    {
        public $username;
        public $email;
        public $password;
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                ['username', 'filter', 'filter' => 'trim'],
                ['username', 'required'],
                ['username', 'unique', 'targetClass' => 'commonmodelsUser', 'message' => 'This username has already been taken.'],
                ['username', 'string', 'min' => 2, 'max' => 255],
    
                ['email', 'filter', 'filter' => 'trim'],
                ['email', 'required'],
                ['email', 'email'],
                ['email', 'string', 'max' => 255],
                ['email', 'unique', 'targetClass' => 'commonmodelsUser', 'message' => 'This email address has already been taken.'],
    
                ['password', 'required'],
                ['password', 'string', 'min' => 6],
            ];
        }

    只需修改rules规则即可完美实现

    a.添加用户字符限制,6-16位

    ['username', 'string', 'min' => 6, 'max' => 16],

    输入限制:用户名由字母,汉字,数字,下划线组成,且不能以数字和下划线开头。

    ['username', 'match','pattern'=>'/^[(x{4E00}-x{9FA5})a-zA-Z]+[(x{4E00}-x{9FA5})a-zA-Z_d]*$/u','message'=>'用户名由字母,汉字,数字,下划线组成,且不能以数字和下划线开头。'],

    b.添加重复密码字段

    public $repassword;

      一般重复密码与密码的字段验证基本上是一致的,所以可以在password中添加repassword,并添加两次输入一致的限制

    [['password','repassword'], 'required'],
    [['password','repassword'], 'string', 'min' => 6],
    ['repassword', 'compare', 'compareAttribute' => 'password','message'=>'两次输入的密码不一致!'],

    c.添加验证码字段

    public $verifyCode;

      验证码有自带的扩展,只需添加以下代码即可

    ['verifyCode', 'captcha'],

    注意:需要在对应的控制器中添加以下代码,本例为SiteController中添加

        public function actions()
        {
            return [
                'captcha' => [
                    'class' => 'yiicaptchaCaptchaAction',
                    'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
                ],
            ];
        }

    修改之后的规则

    class SignupForm extends Model
    {
        public $username;
        public $email;
        public $password;
        
        public $repassword;
        public $verifyCode;
    
        public function rules()
        {
            return [
                ['username', 'filter', 'filter' => 'trim'],
                ['username', 'required'],
                ['username', 'unique', 'targetClass' => 'commonmodelsUser', 'message' => '该用户名已被使用!'],
                ['username', 'string', 'min' => 6, 'max' => 16],
                ['username', 'match','pattern'=>'/^[(x{4E00}-x{9FA5})a-zA-Z]+[(x{4E00}-x{9FA5})a-zA-Z_d]*$/u','message'=>'用户名由字母,汉字,数字,下划线组成,且不能以数字和下划线开头。'],
                
                ['email', 'filter', 'filter' => 'trim'],
                ['email', 'required'],
                ['email', 'email'],
                ['email', 'string', 'max' => 255],
                ['email', 'unique', 'targetClass' => 'commonmodelsUser', 'message' => '该邮箱已经被注册!'],
    
                [['password','repassword'], 'required'],
                [['password','repassword'], 'string', 'min' => 6],
                ['repassword', 'compare', 'compareAttribute' => 'password','message'=>'两次输入的密码不一致!'],
                
                ['verifyCode', 'captcha'],
            ];
        }
        
        ....

    验证一下效果:

    blob.png

    要成为一名优秀的架构师,那就要把自己逼到绝路
  • 相关阅读:
    HDU4857 逃生 拓扑排序
    HDU1285 确定名次 拓扑排序
    【noip模拟赛4】找啊找啊找BF 拓扑排序
    拓扑排序基础
    【noip模拟赛5】任务分配 降维dp
    【noip模拟赛6】收入计划 最大值的最小值 二分答案
    【noip模拟赛5】水流
    标记预期失败
    跳过:
    pytest配置文件:
  • 原文地址:https://www.cnblogs.com/xiexiang168/p/5279519.html
Copyright © 2020-2023  润新知