控制器

控制器生命周期

config/app.phpcontroller_reusefalse时,每个请求都会初始化一次对应的控制器实例,请求结束后控制器实例销毁,这与传统框架运行机制相同。

config/app.phpcontroller_reusetrue时,所有请求将复用控制器实例,也就是控制器实例一旦创建遍常驻内存,所有请求复用。

由于webman的常驻内存特性,在webman1.4之前,默认是一次请求后复用控制器实例。
后续无论在控制器中加/减属性,都将一直保留下去,但这极大可能会引起某些业务的属性冲突导致报错。
所以webman在1.4开始,配置文件中有参数可以设置为false,即不复用实例,这将会带来一些性能影响,但更符合大部分开发者习惯,所以才出来这个控制器curd二版本


参考文档:命令行-webman手册 (workerman.net)

注意,使用命令行必须安装命令行插件
composer require webman/console

 // 生成控制器:api文件夹/Message模块/Anbin控制器
 // php webman make:controller api/message/anbin  
<?php


namespace app\api\Message\controller;


use support\Request;
use app\api\Message\model\Message;


class AnbinController
{
    // 生成控制器:api文件夹/Message模块/Anbin控制器
    // php webman make:controller api/message/anbin  


    // 生成模型:api文件夹/Message模块/message控制器
    // php webman make:model api/message/message


    protected $model;


    public function __construct()
    {
        $this->model = new Message();
    }


    public function add()
    {
        $params = request()->all(); //助手函数获取post和get请求数据
        var_dump($params); //打印接收参数
        $res =  $this->model->create($params);
        if (!empty($res)) {
            return json(['code' => 200, 'msg' => '插入成功']);
        }
        return json(['code' => 500, 'msg' => '插入失败']);
    }


    public function edit()
    {
        $params = request()->all(); //助手函数获取post和get请求数据
        var_dump($params); //打印接收参数
        extract($params);


        if (isset($id) && !empty($id)) {
            $id = is_array($id) ? $id : [$id]; //id处理为数组
            unset($params['id']); //laravel需更新的数据中不可以有id,否则报错id重复
            // laravel中不支持where('id','in',$id)的写法
            //实现方法一
            $res =  $this->model->whereIn('id', $id)->update($params);
            //实现方法二(此法可以将闭包拼接到条件数组中与其他where条件共同使用)
            /* $res =  $this->model->where(function ($query) use ($id) {
                $query->whereIn('id', $id);
            })->update($params); */
            if (!empty($res)) {
                return json(['code' => 200, 'msg' => '更新成功']);
            }
            return json(['code' => 500, 'msg' => '更新失败']);
        }
        return json(['code' => 500, 'msg' => '请传入id']);
    }




    public function del()
    {
        $params = request()->all(); //助手函数获取post和get请求数据
        var_dump($params); //打印接收参数
        extract($params);
        if (isset($id) && !empty($id)) {
            $id = is_array($id) ? $id : [$id]; //id处理为数组
            // 方式一
            $res =  $this->model->whereIn('id', $id)->delete();
            // 方式二
            // $res =  $this->model->destroy($id);
            if (!empty($res)) {
                return json(['code' => 200, 'msg' => '删除成功']);
            }
            return json(['code' => 500, 'msg' => '删除失败']);
        }
        return json(['code' => 500, 'msg' => '请传入id']);
    }


    public function select(Request $request)
    {
        $params = $request->all();
        extract($params);
        if (!isset($id)) {
            return json(['code' => 500, 'msg' => '请传入id']);
        }
        $id = is_array($id) ? $id : [$id]; //id处理为数组
        // $data =  $this->model->find($id); //查询单条/多条
        // $data =  $this->model->all();    $data =  $this->model->get(); //二者都是查询所有,但get适用于带条件
        // $data =  $this->model->where('id', $id)->first(); //有条件-单条查询


        /**
         * 分页
         * 参数一:每页展示条数
         * 参数二:
         * 参数三:定义接收分页的变量名
         * 参数四:当前页码
         */
        // $data =  $this->model->paginate(10, '*', 'page', $page);
        // $count = $data->count(); //总条数
        // $res  = $data->items(); //当前页数据


        // 有条件-多条查询
        $data =  $this->model->where('name', 'like', "%张三%")->get();


        if (!empty($data)) {
            return json($data);
        }
        return response('数据为空');
    }


    // 软删除还原
    public function restore()
    {
        $params = request()->all(); //助手函数获取post和get请求数据
        var_dump($params); //打印接收参数
        extract($params);
        if (isset($id) && !empty($id)) {
            $res =  $this->model->find($id)->restore();
            // $res =  $this->model->restore(); //还原所有
            // $res =  $this->model->where('id', $id)->restore();
            if (!empty($res)) {
                return json(['code' => 200, 'msg' => '软删除还原成功']);
            }
            return json(['code' => 500, 'msg' => '软删除还原失败']);
        }
        return json(['code' => 500, 'msg' => '请传入id']);
    }


    //强制删除(包含软删除和普通删除)
    public function forceDelete()
    {
        $params = request()->all(); //助手函数获取post和get请求数据
        var_dump($params); //打印接收参数
        extract($params);
        if (isset($id) && !empty($id)) {
            $id = is_array($id) ? $id : [$id]; //id处理为数组
            $res =  $this->model->whereIn('id', $id)->forceDelete();
            if (!empty($res)) {
                return json(['code' => 200, 'msg' => '强制删除成功']);
            }
            return json(['code' => 500, 'msg' => '强制删除失败']);
        }
        return json(['code' => 500, 'msg' => '请传入id']);
    }
}
posted @ 2024-07-09 15:59  Anbin啊  阅读(34)  评论(0)    收藏  举报