初学YII框架,与大家分享一下。
首先得配置好数据库,比较简单,这里就不细说了。这里主要说YII框架代码实现。
在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来生成
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
field($model, 'username')->textInput(['autofocus'=>true,'placeholder'=>'请输入用户名']); ?>
field($model, 'password')->passwordInput(['placeholder'=>'请输入密码']);; ?>
field($model, 'email') ?>
'btn btn-primary']) ?>
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;
}
//更多详情参考官方手册
创建表单视图
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
field($model, 'username')->textInput(['autofocus'=>true,'placeholder'=>'请输入用户名']); ?>
field($model, 'password')->passwordInput(['placeholder'=>'请输入密码']);; ?>
field($model, 'email') ?>
'btn btn-primary']) ?>
//更多详情参考官方手册
//http://www.yiichina.com/doc/api/2.0/yii-widgets-activeform
将数据保存到数据库
$user->username=$this->username;
$user->email=$this->email;
$user->save();