- 先配置好数据库
- 在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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦