小言_互联网的博客

thinkphp5.1mvc搭建简单登陆后台增软删除改查(crud)

388人阅读  评论(0)

0.先搭建登录
0.1在应用公共文件(common.php)中创建登录方法

function doLogin(){
    //进行session判断 首先要建立session值
    $id=Session::has('id');
    $url=url('index.php/admin/index/login');
    if(!$id){
    //以下跳转到登录页面
    header('location:'.$url);
    }
  }

0.2 首页的控制器中 index方法中写入dologin()方法

public function index(){
    doLogin();
    return view('index');
}

0.3 控制器中开始搭建login方法和loginout方法
0.3.1 login方法登录方法:验证登录页面传值,验证通过即登陆成功->跳转首页,验证失败->报错误内容(tp5.1为跳转,建议使用js搭建页内提示)->再次跳转登录页面。
具体代码如下:(mvc模式->c层映射到v层页面->表单输入数值->传输的c层中->c层方法调用m层方法->返回到c层->根据返回结果c层进行下一步操作)

controller层:
    


public function login(){
        if(input('sub')){   //如果view层摁下了提交按钮,此处名字与submit标签内名字相同  没有按下按钮则跳转到登录页面
            //创建变量
            $name=input('name');
            $pwd=sha1(input('pwd'));
            $model=new LoginModel();
            $value['name']=$name;
            $value['pwd']=$pwd;
            $rs=$model->check($value);
            if ($rs['name']){
                //创建session
                Session::set('id',$rs['id']);
                Session::set('id',$rs['name']);
                $this->success('登陆成功','index');
            }else{
                $this->error('用户名或密码错误','login');
        }
    }else{
        return view('login')    
    }
}

model层(一下为完整代码):包含check方法,一个接值。接值为一个数组,包含用户名和密码用于数据库查询是否有对应。

<?php
namespace app\admin\model;

use think\Model;

class LoginModel extend Model{
    public function check($value){
        return $this->where($value)->find();
    }
}

view:仅核心表单代码

<form  method="post" action="{:url('index.php/admin/index/login')}">
    <div class="panel loginbox">
        <div class="text-center margin-big padding-big-top"><h1>后台管理系统</h1></div>
        <div class="panel-body" style="padding:30px; padding-bottom:10px; padding-top:10px;">
            <div class="form-group">
                <div class="field field-icon-right">
                    <input type="text" class="input input-big" name="name" placeholder="登录账号" data-validate="required:请填写账号" />
                    <span class="icon icon-user margin-small"></span>
                </div>
            </div>
            <div class="form-group">
                <div class="field field-icon-right">
                    <input type="password" class="input input-big" name="pwd" placeholder="登录密码" data-validate="required:请填写密码" />
                    <span class="icon icon-key margin-small"></span>
                </div>
            </div>
        </div>
        <div style="padding:30px;"><input type="submit" class="button button-block bg-main text-big input-big" value="登录" name="sub"></div>
    </div>
</form>

0.3.2 loginout方法:清楚session或cookie 点击按钮后跳转loginout方法,清除session,再跳转到login页面。具体代码如下:
controller层:

public function loginoutout(){
        session('name','null');
        session ('id','null');
        }
//此处设置为空的内容为登陆时创建的session值;对应关系。

1.数据库增删改查搭建
1.1创建mvc文件(复制已有代码时 注意更换class后文件名) 切割头尾文件。注意tp5.1的引入文件格式为/static/(原为__STATIC__),model层引入 use think\model; 并继承extend Model
1.2确定方法数量
1.2.1index方法->查询数据->跳转add,edit,del;
1.2.2add方法
1.2.3edit方法(修改方法)
1.2.4del方法(软删除)
1.2.5 controller 中创建方法,代码如下

return 1;

仅能确定index方法可以进入。联通后开始创建index页面。
1.3搭建显示页面
1.3.1在index()方法中映射到index.html
1.3.2查询数据,引入分页。
controller代码:

public function index(){
    $model=new AdminModel();
    $rs=$model->paginate(5);
    $this->assign('rs',$rs);
    return view('index');
}

view代码:需要在table外增加分页代码;在循环中 name为定义的数组的名字,id为vo.name

<table class="table table-bordered table-hover tablesorter">
                    <tr>
                        <th>编号</th>
                        <th>管理员姓名</th>
                        <th>权限等级</th>
                        <th>操作</th>
                    </tr>
                    {volist name="$rs" id="vo"}
                    <tr>
                        <th>{$key+1}</th>
                        <th>{$vo.name}</th>
                        <th>{if condition="$vo.power==0"}超级管理员{else /}普通用户{/if}</th>
                        <th><a href="{:url('index.php/admin/admin/del')}?id={$vo.id}">删除</a><a href="{:url('index.php/admin/admin/mod')}?id={$vo.id}">修改</a></th>
                    </tr>
                    {/volist}
</table>
<div style="text-align=center">
    {$rs|raw}
</div>

1.4 搭建软删除
我们先看看硬删除

controller中的方法:

if(input('id')){
    $id=input('id');
    $banner=new banner_banner;
    $query=$banner->delete_banner($id);
    if($query>0){
        return $this->success("数据删除成功","index");
    }
    else{
        return $this->error("数据删除失败","index");
    }
}

model中:

public function delete_banner($id)
{
    return $this->where('id', $id)->delete();
}

软删除就是在数据库中增加一个字段,用于存放数据的删除时间。
使用软删除首先要在model 中增加一下代码

<?php
namespace app\admin\model;
use think\Model;
use think\model\concern\SoftDelete;


class AdminModel extends Model{
    //设置数据库的名字
    protected $table = 'art_admin';
    use SoftDelete;
    protected  $deleteTime = 'delete_time';//必须  后边名字对应数据库中的字段名,如果数据库中字段为123则此处填写123
    protected $updateTime = 'update_time';//必须   记录数据更新时间,要在datebase.php中打开此选项。
}

controller中直接使用destroy(id值)方法即可

public function del(){
     $id=input('id');
     $model=new AdminModel();
     $query=$model->destroy($id);
    if($query>0){
        return $this->success("数据删除成功","index");
    }
    else{
        return $this->error("数据删除失败","index");
    }
}

由于搭建了软删除,所以在查询中增加一个条件,将已经软删除的数据不予以显示。但thinkphp5自动屏蔽了软删除的数据,就不用再更改代码了。
1.5 数据添加
1.5.1 在方法中增加映射页面。
1.5.2 view 表单代码

<form role="form" action="{:url('admin/admin/add')}" method="post">
    <div class="form-group">
        <label>用户名</label>
        <input class="form-control" type="text"  placeholder="请输入用户名" name="name"  >
        <p class="help-block"></p>
    </div>
    <div class="form-group">
        <label>密码</label>
        <input class="form-control" type="password" value="" name="pwd" id="pwd" required placeholder="请输入密码" >
        <p class="help-block"></p>
    </div>
    <div class="form-group">
        <label>确认密码</label>
        <input class="form-control" type="password" value="" name="pwd2" id="pwd2" required placeholder="请再次输入密码" >
        <input type="hidden" value="" name="created_at" id="time">
        <p class="help-block"></p>
    </div>
    <div><p class="help-block" id="info"></p></div>
    <div class="form-group">
        <label>权限</label>
        <select class="form-control" name="power">
            <option value="1">普通用户</option>
            <option value="0">管理员</option>
        </select>
    </div>
    <input type="submit" name="sub" id="sub" class="btn btn-default" value="添加" >
</form>

1.5.3controller中代码 方法主体是一个if else 如果接收到添加按钮,就走if,没有接受到添加按钮就走else即映射页面。

public function add(){
    if(input('sub')){
         $name=input('name');
         $pwd=sha1(input('pwd'));
         $power=input('power');
         $model= new AdminModel();
         $rs=$model->save(['name'=>$name,'pwd'=>$pwd,'power'=>$power]);
         if ($rs>0){
             return $this->success("数据添加成功","index");
         }else{
             return $this->error("数据添加失败","add");
         }
    }else{
        return view('add');
    }
}

model中 声明创建时间,删除时间,修改时间

<?php
namespace app\admin\model;
use think\Model;
use think\model\concern\SoftDelete;
class AdminModel extends Model{
    //设置数据库的名字
    protected $table = 'art_admin';
    use SoftDelete;
    protected  $deleteTime = 'delete_time';//必须  后边名字对应数据库中的字段名
    protected $createTime = 'create_time';//必须
    protected $updateTime = 'update_time';//必须
}

1.6 数据修改
1.6.1 在方法中创建映射 注意跳转链接是否添加。
1.6.2 修改包含两步,首先查询出数据,再修改数据。仍然是一个if else if内写修改代码 else 写显示代码
1.6.3 由于是管理员的修改,要先输入原密码才能更改密码,所以v层加一个原密码
view:

<form role="form" action="{:url('admin/admin/edit')}" method="post">
            <div class="form-group">
                <label>用户名</label>
                <input class="form-control" type="text" value="{$rs.name}" name="name">
                <p class="help-block"></p>
            </div>
            <div class="form-group">
                <label>原密码</label>
                <input class="form-control" type="password" name="oldPwd">
                <p class="help-block"></p>
            </div>
            <div class="form-group">
                <label>新密码</label>
                <input class="form-control" type="password" value="" name="pwd" id="pwd">
                <p class="help-block"></p>
            </div>
            <div class="form-group">
                <label>确认新密码</label>
                <input class="form-control" type="password" value="" name="pwd2" id="pwd2">
                <p class="help-block"></p>
            </div>
<div class="help-block" id="info"></div>
            <div class="form-group">
            </div>
            <div class="form-group">
                <label>权限</label>
                <select class="form-control" name="power">
                    <option value="1" {if condition="$rs.power==1"} selected{/if}>普通用户</option>
                    <option value="0" {if condition="$rs.power==0"} selected{/if}>超级管理员</option>
                </select>
            </div>
            {notempty name="$rs"}
            <input type="hidden" name="id" value="{$rs.id}">
            {/notempty}
            <input type="submit" name="sub" id="sub" class="btn btn-default" value="修改">
        </form>

controller:
1.6.4
save()方法与get($id)使用为修改 不能使用where方法。

public function edit(){
    if(input('sub')){
         //接收到修改后先验证原始密码是否正确
        $id=input('id');
        $pwd1=sha1(input('oldPwd'));
        $model=new AdminModel();
        $rs=$model->where('id',$id)->find();
        if($pwd1!=$rs['pwd']){
            return $this->error("原密码不正确","edit?id=$id");
        }else{
            $name=input('name');
            $pwd=sha1(input('pwd'));
            $power=input('power');
            $query=$model->get($id)->save(['name'=>$name,'pwd'=>$pwd,'power'=>$power]);
            if ($query>0){
                return $this->success("数据修改成功","index");
            }else{
                return $this->error("数据修改失败","edit?id=$id");
            }
        }
    }else{
        $id=input('id');
        $model = new AdminModel();
        $rs=$model->where('id',$id)->find();
        $this->assign('rs',$rs);
        return view('edit');
    }
}

2.0.0 banner的增删改查
2.1.1 创建所需要文件 比如复制刚刚写好的那个。
2.1.2 修改BannerModel 名字 ,数据库名字,引入软删除方法。
经修改后原始文件
Model:

<?php
namespace app\admin\model;
use think\Model;
use think\model\concern\SoftDelete;
class BannerModel extends Model{
    //设置数据库的名字
    protected $table = 'art_Banner';
    use SoftDelete;
    protected  $deleteTime = 'delete_time';//必须  后边名字对应数据库中的字段名
    protected $createTime = 'create_time';//必须
    protected $updateTime = 'update_time';//必须
}

controller:

<?php
namespace app\admin\controller;


class Banner extends  Comm {
    public function index(){
    }
    public function add(){
    }
    public function edit(){
    }
    public function del(){
    }
}

view:修改标题,修改所有的链接,修改表头,内容替换。
未完,年更。
欢迎留言提出问题。。


转载:https://blog.csdn.net/leofind/article/details/104683583
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场