为了账号安全,请及时绑定邮箱和手机立即绑定

Yii 2.0 框架初学之实现注册功能

标签:
PHP
  • 先配置好数据库
  • 在controller/siteController.php控制器里设置注册方法
/**
* @return string\yii\web\Response
* 设置注册方法
*/

public function actionSignup()
{

    {
        $model = new SignupForm();

        if ($model->load(Yii::$app->request->post())) //载入post所获取的数据
        {
            if ($user=$model->signup())
            {
                if(Yii::$app->getUser()->login($user))
                {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]); //显示注册页面
    }

}
  • 在models/signupForm.php 的模型类文件
namespace home\models;

use yii\base\Model;

class SignupForm extends Model
{
    public $username;
    public $password;
    public $email;

     public function rules()
     {
    return [
        [['username','password','email'],'required'],
        ['email','email'],
        ['username','filter','filter'=>'trim'],//过滤输入的空格
        ['username','string','min'=>2,'max'=>8],//限制输入字符的长度
        ['username','unique','targetClass'=>'home\models\User','message'=>'用户名已存在'],//判断用户名是否已被注册
        ['email','unique','targetClass'=>'home\models\User','message'=>'邮箱已被注册'],//判断邮箱是否已被注册

         ];
     }

public function attributeLabels() //设置字段标签名
{
    return [
        'username'=>'用户名',
        'password'=>'密码',
        'email'=>'邮箱',
    ];
}
public function signup()
{

    if(!$this->validate()) //validate方法即执行rules方法里的设置
    {
        return null;
    }
        $user=new User();
        $user->username=$this->username;
        $user->setPassword($this->password);//存储并加密密码的方法,在User模型类里
        $user->email=$this->email;
        $user->setAuthKey();
        //插入数据库
        return $user->save() ? $user : null;

}

}
  • 在view文件夹下新建注册页面的视图文件
注册页面的视图文件可用Gii来生成

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>
<div class="signup">

    <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'username')->textInput(['autofocus'=>true,'placeholder'=>'请输入用户名']); ?>
        <?= $form->field($model, 'password')->passwordInput(['placeholder'=>'请输入密码']);; ?>

        <?= $form->field($model, 'email') ?>

        <div class="form-group">
            <?= Html::submitButton('注册', ['class' => 'btn btn-primary']) ?>
        </div>
    <?php ActiveForm::end(); ?>

</div>

表单视图

  • 在User模型类里书写以下代码
namespace home\models;

use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

/**
* @param $password
* 存储并加密密码
*/
public  function setPassword($password)
{
    $this->password_hash=\Yii::$app->security->generatePasswordHash($password);
}

/**
*产生authkey
*/
public function setAuthKey()
{
    $this->auth_key=\Yii::$app->security->generateRandomString();
}

- 这个功能用到的知识点

  • 模型载入用户所提交的数据
$model->load(\Yii:$app->request->post())

延伸学习
//处理请求
$request=Yii::$app->request;
$get=$request->get();//获取get的值,等价于$get=$_GET;
$id=$request->get('id');// 等价于$id = isset($_GET['id']) ? $_GET['id'] : null;
$id=$request->get('id','1');//等价于$id=isset($_GET['id']) ? $_GET['id'] : 1;
$post=Yii::$app->request->post();
$post=Yii::$app->request->post('name','');// $id=isset($_POST['name']) ? $_POST['name'] : '';

//判断请求方法
if(Yii::$app->request->isPost){};
if(Yii::$app->request->isAjax){};
if(Yii::$app->request->isGet){};
if(Yii::$app->request->isPut){};

//更多参考见官方文档
  • 登录用户
Yii::$app->getUser()->login($user)
  • 表单输入验证的规则设置
public function rules()
     {
    return [
        [['username','password','email'],'required'],
        ['email','email'],
        ['username','filter','filter'=>'trim'],//过滤输入的空格
        ['username','string','min'=>2,'max'=>8],//限制输入字符的长度
        ['username','unique','targetClass'=>'home\models\User','message'=>'用户名已存在'],//判断用户名是否已被注册
        ['email','unique','targetClass'=>'home\models\User','message'=>'邮箱已被注册'],//判断邮箱是否已被注册

         ];
     }

//搭配以下代码使用
if ($model->validate())
{ // all inputs are valid
}
else
{ // validation failed: $errors is an array containing error messages $errors = $model->errors;
}

//更多详情参考官方手册
//http://www.yiichina.com/doc/guide/2.0/input-validation
  • 创建表单视图
<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>
<div class="signup">

    <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'username')->textInput(['autofocus'=>true,'placeholder'=>'请输入用户名']); ?>
        <?= $form->field($model, 'password')->passwordInput(['placeholder'=>'请输入密码']);; ?>

        <?= $form->field($model, 'email') ?>

        <div class="form-group">
            <?= Html::submitButton('注册', ['class' => 'btn btn-primary']) ?>
        </div>
    <?php ActiveForm::end(); ?>

</div>

//更多详情参考官方手册
//http://www.yiichina.com/doc/api/2.0/yii-widgets-activeform
  • 将数据保存到数据库
  $user->username=$this->username;
        $user->email=$this->email;
        $user->save();

以上,刚接触Yii框架学习,如有不足,请多多指教!^_^

点击查看更多内容
15人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
10
获赞与收藏
144

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消