新建一个admin,在添加控制器,模型,视图和验证器(controller,model,view,validate)然后分别新建一个User.php控制器,模型,验证器,在视图下新建user文件夹(index.html主页,userlist.html用户列表,add.html添加用户等)
模型
在模型添加数据库的属性的处理方法,加密密码等行为
<?php
namespace app\admin\model;
use think\Model;
use traits\model\SoftDelete;
class User extends Model{
use SoftDelete;
protected static $deleteTime='delete_time';
protected $auto=['ip','password','repassword'];
protected function setIpAttr(){
return request()->ip();
}
protected function setPasswordAttr($value){
return md5($value);
}
protected function setRepasswordAttr($value){
return md5($value);
}
}
验证器
在验证器中设置添加用户表单的验证方法和错误信息
<?php
namespace app\admin\model;
use think\Model;
use traits\model\SoftDelete;
class User extends Model{
use SoftDelete;
protected static $deleteTime='delete_time';
protected $auto=['ip','password','repassword'];
protected function setIpAttr(){
return request()->ip();
}
protected function setPasswordAttr($value){
return md5($value);
}
protected function setRepasswordAttr($value){
return md5($value);
}
}
- 在控制器中使用模型和验证器,添加用户功能,在首页中点击添加会直接打开add模块,选择填写用户名,密码和确认密码,和email,在这个表单中将action设置为insert,在User控制器中添加insert方法,可以直接获取这个表单中的数据;这样就完成了向数据库中添加数据
public function insert(){
$data=input('post.');
$val=new UserValidate();
if(!$val->check($data)){
$this->error($val->getError());
exit();
}
$user=new UserModel($data);
$ret=$user->allowField(true)->save();
if($ret){
$this->success('新增管理员成功','User/userlist');
}
else{
$this->error('添加管理员失败');
}
}
- 查看用户列表,通过模型获取数据库数据然后调用paginate方法设置每页的数据条数,使用redend获取数据的页码,然后使用assign将变量输出到模板中
public function userlist(){
$data=UserModel::paginate(3);
$this->assign('data',$data);
$page=$data->render();
$this->assign('page',$page);
return $this->fetch();
}
- 修改信息,首先从用户列表模板中获取所需要修改的用户的id,在控制器中获取信息之后可以将这个用户信息传入编辑模块中
<a href="edit?id={$value.id}" ">
public function edit(){
$id=input('get.id');
$data=UserModel::get($id);
$this->assign('data',$data);
return $this->fetch();
}
- 更新修改后的数据,将编辑模板中的表单设置action为update,获取修改用户的id,将id传给控制器
<input type="hidden" name="id" value="{$data.id}">
public function update(){
$data=input('post.');
$id=input('post.id');
$val=new UserValidate();
if(!$val->check($data)){
$this->error($val->getError());
exit();
}
$user=new UserModel();
$ret=$user->allowField(true)->save($data,['id'=>$id]);
if($ret){
$this->success('更新成功','User/userlist');
}
else{
$this->error('修改失败');
}
}
- 删除用户数据,软删除(真实删除就把destroy第二个参数改为true)
public function delete(){
$id=input('get.id');
$user=UserModel::destroy($id);
if($user){
$this->success('删除成功','User/userlist');
}else{
$this->error('删除失败');
}
}
- 登陆检查和退出登陆
class Index extends Controller{
public function login(){
return $this->fetch();
}
public function check(){
$data=input('post.');
$user=new UserModel();
$ret=$user->where('name',$data['name'])->find();
if($ret){
if($ret['password']===md5($data['password'])){
session('name',$data['name']);
}else{
$this->error('用户密码错误');
}
}else{
$this->error('用户名不存在');
exit();
}
if(captcha_check($data['code'])){
$this->success('登录成功','User/index');
}else{
$this->error('验证码错误');
}
}
public function logout(){
$ret=session(null);
$this->success('退出登录','Index/login');
}
}
- 完善登录,不能让用户可以直接绕过路由直接登录,新增一个Base控制器,然后使用_initialize初始化,让User控制器继承这个Base控制器,这样在访问User控制器的路由时必须首先启动Base控制器中的方法(验证用户是否登录)
class Base extends Controller{
protected function _initialize()
{
if(!session('name')){
$this->error('请登录','Index/login');
}
}
}