我们在返回API数据的时候,一般是使用json格式输出,如上节处理找不到控制器或方法返回数据:
public function __call($name, $arguments)
{
// 如果是API模块,需要输出API的数据格式(一般是json)
// 如果是模板引擎的方式,需要输出自定义错误页面
$result = [
'status' => 0,
'message' => '找不到该方法',
'result' => null
];
return json($result, 400);
}
这种方式是在设计API接口时用的比较多的,为了统一后台返回的数据格式,方便前端统一处理,我们可以设计通用化的API数据格式。
在app
目录有一个common.php
文件,这个是公用的文件,可以在这里定义公用的方法:
// 应用公共文件
/**
* 通用化API数据格式输出
* @param $status
* @param string $message
* @param array $data
* @param int $httpStatus
* @return \think\response\Json
*/
function show($status, $message = 'error', $data = [], $httpStatus = 200){
$result = [
"status" => $status,
"message" => $message,
"result" => $data
];
return json($result, $httpStatus);
}
参数 | 作用 | 默认值 |
---|---|---|
$status |
业务代码 | |
$message |
返回消息 | error |
$data |
返回数据 | [ ] |
$httpStatus |
HTTP状态码 | 200 |
我们修改下 BaseController
控制器的 __call
方法:
public function __call($name, $arguments)
{
// 如果是API模块,需要输出API的数据格式(一般是json)
// 如果是模板引擎的方式,需要输出自定义错误页面
/*$result = [
'status' => 0,
'message' => '找不到该方法',
'result' => null
];
return json($result, 400);*/
return show(0, "找不到{
$name}方法", null, 404);
}
如上代码中的业务状态码是在调用common方法时传递的,当我们业务逻辑复杂的时候,这个状态码会很多,为了避免冲突和方便管理维护,我们可以统一配置在一个地方:
在config
目录新建一个status.php
文件用来存放业务代码配置。
文件名可以随意,在
config
目录下文件都会自动加载,使用config("文件名.字段名")
即可获取配置值,如config("status.action_not_found")
文件内容如下,具体状态码可以根据具体的业务场景自行设置:
/**
* 该文件主要存放业务状态码相关的配置
*/
return [
"success" => 1,
"error" => 0,
"not_login" => -1,
"user_is_register" => -2,
"action_not_found" => -3
];
然后我们修改下 BaseController
的 __call
方法:
return show(config("status.action_not_found"), "找不到{
$name}方法", null, 404);