控制器
控制器生命周期
当config/app.php
里controller_reuse
为false
时,每个请求都会初始化一次对应的控制器实例,请求结束后控制器实例销毁,这与传统框架运行机制相同。
当config/app.php
里controller_reuse
为true
时,所有请求将复用控制器实例,也就是控制器实例一旦创建遍常驻内存,所有请求复用。
由于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']);
}
}