ThinkPHP

ThinkPHP5 快速curd

2018-09-17  本文已影响14人  小无力

thinkphp5-fast-curd

项目介绍

适用于ThinkPHP5(简单、快速的构建CURD)

通过以下代码简单的常规CURD就完成了,接下来就可以去处理前端表单或列表了

<?php
...
// 类放置位置
use app\traits\Resources;
use app\models\ArticleModel;

class Article extends Controller
{
    use Resources;
    
    public function __construct(Request $request = null)
    {
        parent::__construct($request);
        $this->db = new ArticleModel();
    }
}

大部分需求可以使用控制器前置操作或者模型事件 加上模型关联处理
如不能满足需求可在控制器内重写Resources内方法

PHP方法优先级

自身方法 > trait > 父类

<?php

class BaseController
{
    public function index()
    {
        return 'base';
    }
}

class ArticleController extends BaseController
{
    use Test;
    public function index()
    {
        return 'article';
    }
}

trait Test
{
    public function index()
    {
        return 'trait';
    }

    public function create()
    {
        return 'create';
    }
}

访问http://website/article/index
结果 article

访问http://website/article/create
结果 create

实现代码

<?php

namespace app\traits;

/**
 * @author      renjianfei
 * @datetime    2018/09/13
 */
trait Resources
{
    private $db = null;

    private $pk = 'id';

    private $softDeleteKey = 'visible';
    /**
     * 排序方式
     */
    protected function sort($sort = '')
    {
        return empty($sort) ? $this->pk .' desc' : $sort;
    }

    /**
     * 列表筛选
     */
    protected function filter()
    {
        return array_filter(input());
    }

    /**
     * @param $list 列表数据
     */
    protected function afterIndex($list = [])
    {
        // TODO xxxx
    }

    /**
     * 显示资源列表
     */
    public function index()
    {
        $list = $this->db->order($this->sort())->where($this->filter())->paginate();
        $this->afterIndex($list);
        return view('',[
            'list' => $list,
        ]);
    }

    /**
     * 显示创建资源表单前
     */
    public function beforeCreate()
    {
        
    }

    /**
     * 显示创建资源表单
     */
    public function create()
    {
        $this->beforeCreate();
        return view();
    }

    /**
     * 保存新建的资源前置操作
     */
    protected function beforeSave()
    {

    }

    /**
     * 保存新建的资源
     */
    public function save()
    {
        $this->beforeSave();
        $res = $this->db->allowField(true)->save(array_filter(input())) ? $this->success('操作成功') : $this->error('保存失败');
    }

    /**
     * 显示指定的资源
     */
    public function read($id)
    {
        $info = $this->db->findOrFail($id);
        return view('',[
            'info' => $info
        ]);
    }

    /**
     * 显示指定资源表单
     */
    public function edit($id)
    {
        $info = $this->db->findOrFail($id);
        return view('edit',[
            'info' => $info
        ]);
    }

    /**
     * 更新资源前
     */
    public function beforeUpdate()
    {
        
    }

    /**
     * 保存更新的资源
     */
    public function update($id)
    {
        $this->beforeUpdate();
        $this->db->allowField(true)->save(input(),[$this->pk => $id]) ? $this->success('保存成功',url('index')) : $this->error('保存失败');
    }

    /**
     * 软删除指定的资源
     */
    public function delete($id)
    {
        $this->db->update([
            $this->softDeleteKey = 0
        ],[
            'id' => $id
        ]);
    }

    /**
     * 真实删除某行记录
     */
    public function destroy($id)
    {
        $this->db->where('id', $id)->delete() ? $this->success('删除成功') : $this->error('删除失败');
    }

}

源代码地址

上一篇下一篇

猜你喜欢

热点阅读