thinkphp5中的mvc(实现简单的增删改查)

MVC

M: model (模型) 就是数据库操作类(通过数据库操作类去操作各个表),必须要实例化一个数据库操作类

V: view (模版/视图) 第一个视图指mysql里的视图(没有),第二个视图是指模板

C; control (模块/控制器 )通过控制器来实现模板,模型之间的控制关系

thinkphp5中的mvc(实现简单的增删改查)_第1张图片

url地址f访问时写的是模块/控制器/方法

index/index/version 查看tp5版本,就是利用了模板里的{$Think.version}

 

 

thinkphp5中的mvc(实现简单的增删改查)_第2张图片

 

 

 

显示主页:

控制类(index/controller/Teachers.php)

 
  
use app\common\model\Teacher;//引入
use think\Controller;
public function index()
    {
     //实例化模型类:new 类名
$Teacher = new Teacher; $teachers = $Teacher->select(); // 向V层传数据 $this->assign('teachers', $teachers); // 取回打包后的数据
   //使用fetch方法要引入:
use think\Controller;并让teacher类继承Controller类
$htmls = $this->fetch();
// 将数据返回给用户
        return $htmls;
    }

 

模型类(app/common/Teacher.php)

namespace app\common\model;


use think\Model;
class Teacher extends Model
{
}

 

其中不需要写什么,继承基础类model类就可以,基本方法在model里

 

模板类(index/view/teachers/index.php)

 




    
    教师管理
    

class="container">
class="row">
class="col-md-12"> class="table table-hover table-bordered"> class="info"> {volist name="teachers" id="teacher" key="key"} {/volist}
序号 姓名 性别 邮箱 用户名 操作
{$key} {$teacher->getData('name')} {eq name='teacher->getData("sex")' value='0'}男{else /}女{/eq} {$teacher->getData('email')} {$teacher->getData('username')} $teacher->getData('id'))}">编辑    $teacher->getData('id'))}">删除

 

实现效果

thinkphp5中的mvc(实现简单的增删改查)_第3张图片

 

增:

在控制器类里需要些两个方法,一个是add()方法用来显示增添人员的页面,一个是insert()方法用来把数据插入数据库,调用的是模型中的save()方法

use think\Request;
//引入这个类获取表单请求的值
public
function add() { $htmls = $this->fetch(); return $htmls; } public function insert() { // 接收传入数据 $postData = Request::instance()->post(); // 实例化Teacher空对象 $Teacher = new Teacher(); // 为对象赋值 $Teacher->name = $postData['name']; $Teacher->username = $postData['username']; $Teacher->sex = $postData['sex']; $Teacher->email = $postData['email']; // $Teacher->create_time =time();//因为在database.php中加入了'auto_timestamp' => true,使用自动加入时间戳,所以这里不需要再加
// 新增对象至数据表 
$result=$Teacher->validate(true)->save($Teacher->getData()); // 反馈结果 if (false === $result) { return $this->error('新增失败:' . $Teacher->getError(),'Teachers/add'); } else { return $this->success('新增成功。新增ID为:' . $Teacher->id,'Teachers/index'); } }

在模板index.php中增加一个链接,当点击增加链接时跳转到teachers控制器下的add方法

<a href="{:url('Teachers/add')}">增加a>

 

效果图:

thinkphp5中的mvc(实现简单的增删改查)_第4张图片

获取删除对象的id,然后调用的是模型中的delete()方法

    public function delete()
    {
        // 获取pathinfo传入的ID值.
        $id = Request::instance()->param('id/d'); // “/d”表示将数值转化为“整形”
        if (is_null($id) || 0 === $id) {
            return $this->error('未获取到ID信息');
        }

        // 获取要删除的对象
        $Teacher = Teacher::get($id);

        // 要删除的对象不存在
        if (is_null($Teacher)) {
            return $this->error('不存在id为' . $id . '的教师,删除失败');
        }

        // 删除对象
        if (!$Teacher->delete()) {
            return $this->error('删除失败:' . $Teacher->getError());
        }

        // 进行跳转
        return $this->success('删除成功', url('index'));
    }

效果图:

thinkphp5中的mvc(实现简单的增删改查)_第5张图片

当删除不存在的id时(页面显示的id与数据库数据的id不一样,在index.html中用的是{$key}的值):

thinkphp5中的mvc(实现简单的增删改查)_第6张图片

 

控制器里原来的index()方法:要重新改写:

    public function index()
    {
        $name=Request::instance()->get('name');
        echo $name;
        $Teacher = new Teacher;

        if(!empty($name)){
            $teachers=$Teacher->where('name','like','%'.$name.'%')->select();
        }else{
            $teachers = $Teacher->select();
        }
        
        // 向V层传数据
        $this->assign('teachers', $teachers);

        // 取回打包后的数据
        $htmls = $this->fetch();

        // 将数据返回给用户
        return $htmls;
    }

在主页面显示index.html中增加查询框:

如果我们只想跳回到当前页,那么在url()函数中,是不需要有任何参数的。url()表示生成 当前模块当前控制器当前触发器 的链接

<hr />
    <div class="row">
        <div class="col-md-8">
            <form class="form-inline">
                <div class="form-group">
                    <label class="sr-only" for="name">姓名label>
                    <input name="name" type="text" class="form-control" placeholder="姓名...">
                div>
                <button type="submit" class="btn btn-default"><i class="glyphicon glyphicon-search">i> 查询button>
            form>
        div>
    div>
    <hr />

效果图:

thinkphp5中的mvc(实现简单的增删改查)_第7张图片

现在发现一个问题,当我们输入关键字点击查询后,原来查询框了关键字消失了

在模板index.html里的查询框里给一个value值,可解决

 <input name="name" type="text" class="form-control" placeholder="姓名..." value="{:input('get.name')}">

inputurl一样,同为助手函数。input('get.name')作用同Request::instance()->get('name'),适用于在V层调用。

 

在控制器类里需要些两个方法,一个是edit()方法通过传id用来显示修改人员的页面,一个是update()方法用来更新数据库,调用的是也是模型中的save()方法

 public function edit()
    {
        // 获取传入ID
        $id = Request::instance()->param('id/d');
        // 在Teacher表模型中获取当前记录
        $Teacher = Teacher::get($id);

        // 将数据传给V层
        $this->assign('Teacher', $Teacher);

        // 获取封装好的V层内容
        $htmls = $this->fetch();

        // 将封装好的V层内容返回给用户
        return $htmls;
    }

更新数据库第一种方法

直接接收数据
public function update()
    {
        try {
            $t1=Request::instance()->post();
            // 获取当前对象
            $teacher=new Teacher();
            if (!is_null($t1)) {
                if (false === $teacher->validate(true)->isUpdate()->save($t1)) {
                    return $this->error('更新失败' . $teacher->getError());
                }
            } else {
                throw new \Exception("所更新的记录不存在", 1);   // 调用PHP内置类时,需要在前面加上 \
            }
            // 获取到ThinkPHP的内置异常时,直接向上抛出,交给ThinkPHP处理
        } catch (\think\Exception\HttpResponseException $e) {
            throw $e;
            // 获取到正常的异常时,输出异常
        } catch (\Exception $e) {
            return $e->getMessage();
        }

        // 成功跳转至index触发器
        return $this->success('操作成功', url('index'));
    }

第二种办法

通过获取接收id,通过id操作数据库
public function update2()
    {
        // 接收数据,获取要更新的关键字信息
        $id = Request::instance()->post('id/d');
        // 获取当前对象
        $Teacher = Teacher::get($id);
        // 写入要更新的数据
        $Teacher->name = Request::instance()->post('name');
        $Teacher->username = Request::instance()->post('username');
        $Teacher->sex = Request::instance()->post('sex/d');
        $Teacher->email = Request::instance()->post('email');
        // 更新
        $flag=$Teacher->validate(true)->save();

        if($flag){
            return $this->success('更新成功', url('index'));
        }else{
            return $this->error('更新失败', url('edit'));
        }
    }

效果:

thinkphp5中的mvc(实现简单的增删改查)_第8张图片

 

 

 

 

 

 

 

 

 

 

 

 
 

你可能感兴趣的:(thinkphp5中的mvc(实现简单的增删改查))