thinkphp 通用的api格式封装
1.创建status.php 用于设置通用的状态码返回枚举类
<?php return[ "success"=>1, "error"=>0, "controller_not_found"=>-1, "action_not_found"=>-2, ];
2.将api返回格式统一封装
<?php /**api 统一格式化 * @param $status * @param $message * @param $data * @param $httpstatus * @return \think\response\json */ function show($status,$message,$data=[],$httpstatus=200){ $result = [ "status"=>$status, "message"=>$message, "data"=>$data, ]; return json($result,$httpstatus); }
3.重写basecontroller中的__call方法
在basecontroller中重写__call方法,当调用不存在的方法时,就会调用__call方法,会传入请求方法和参数
<?php declare (strict_types = 1); namespace app; use think\app; use think\exception\validateexception; use think\validate; /** * 控制器基础类 */ abstract class basecontroller { /** * request实例 * @var \think\request */ protected $request; /** * 应用实例 * @var \think\app */ protected $app; /** * 是否批量验证 * @var bool */ protected $batchvalidate = false; /** * 控制器中间件 * @var array */ protected $middleware = []; /** * 构造方法 * @access public * @param app $app 应用对象 */ public function __construct(app $app) { $this->app = $app; $this->request = $this->app->request; // 控制器初始化 $this->initialize(); } // 初始化 protected function initialize() {} /** * 验证数据 * @access protected * @param array $data 数据 * @param string|array $validate 验证器名或者验证规则数组 * @param array $message 提示信息 * @param bool $batch 是否批量验证 * @return array|string|true * @throws validateexception */ protected function validate(array $data, string|array $validate, array $message = [], bool $batch = false) { if (is_array($validate)) { $v = new validate(); $v->rule($validate); } else { if (strpos($validate, '.')) { // 支持场景 [$validate, $scene] = explode('.', $validate); } $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseclass('validate', $validate); $v = new $class(); if (!empty($scene)) { $v->scene($scene); } } $v->message($message); // 是否批量验证 if ($batch || $this->batchvalidate) { $v->batch(true); } return $v->failexception(true)->check($data); } // 重写__call部分 public function __call(string $name, array $arguments) { // todo: implement __call() method. return show(config("status.action_not_found"),"找不到{$name}方法",null,404); } }
4.在控制器下面新建error控制器,然后添加__call方法
在控制器下面新建error控制器,然后添加__call方法,这样就会调用不存在的控制器的时候会调用__call方法,会传入请求的控制器名称和参数
<?php namespace app\index\controller; class error{ public function __call(string $name, array $arguments) { // todo: implement __call() method. return show(config("status.controller_not_found"),"找不到{$name}控制器",null,404); } }
测试
假定一个成功的请求,测试一下
public function jsontest(){ $data = ['name' => 'thinkphp', 'status' => '1']; return show(config("status.success"),"请求成功",$data); }
到此这篇关于thinkphp 通用的api格式封装的文章就介绍到这了,更多相关thinkphp api格式封装内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论