美文网首页
项目实战

项目实战

作者: 2764906e4d3d | 来源:发表于2019-05-10 18:10 被阅读0次

新建一个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);
    }

}
  1. 在控制器中使用模型和验证器,添加用户功能,在首页中点击添加会直接打开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('添加管理员失败');
        }

    }
  1. 查看用户列表,通过模型获取数据库数据然后调用paginate方法设置每页的数据条数,使用redend获取数据的页码,然后使用assign将变量输出到模板中
    public function userlist(){
        $data=UserModel::paginate(3);
        $this->assign('data',$data);
        $page=$data->render();
        $this->assign('page',$page);
        return  $this->fetch();
    }
  1. 修改信息,首先从用户列表模板中获取所需要修改的用户的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();
    }
  1. 更新修改后的数据,将编辑模板中的表单设置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('修改失败');
        }
    }
  1. 删除用户数据,软删除(真实删除就把destroy第二个参数改为true)
    public function delete(){
        $id=input('get.id');
        $user=UserModel::destroy($id);
        if($user){
            $this->success('删除成功','User/userlist');
        }else{
            $this->error('删除失败');
        }
    }
  1. 登陆检查和退出登陆
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');
    }

}
  1. 完善登录,不能让用户可以直接绕过路由直接登录,新增一个Base控制器,然后使用_initialize初始化,让User控制器继承这个Base控制器,这样在访问User控制器的路由时必须首先启动Base控制器中的方法(验证用户是否登录)
class Base extends Controller{
    protected function _initialize()
{
    if(!session('name')){
        $this->error('请登录','Index/login');
    }
}
}

相关文章

网友评论

      本文标题:项目实战

      本文链接:https://www.haomeiwen.com/subject/qqfgpqtx.html