0, 'msg' => $msg, 'time' => time(), 'data' => $data ?? new \stdClass(), ]; //response返回的Content-Type:text/html; charset=utf-8,使用浏览器单独访问接口地址方便调试, //但是注意在javascript进行ajax请求时,要设置dataType: "json",这样,javascript得到字符串后,会自动使用JSON.parse对字符串进行解析 // return json_encode($result,JSON_UNESCAPED_UNICODE); //使用json方法进行返回的好处: // 1.客户端在进行ajax请求时,不需要设置dataType: "json",依旧会认为得到的数据是json // 2.APP_DEBUG = true,客户端得到的也仅仅是json部分数据,不会夹杂trace等debug代码 // return json($result); //记录Api请求日志 if (app('http')->getName() === 'api') { Log::create([ 'rule' => request()->url(), 'request_body' => json_encode(request()->post(), JSON_UNESCAPED_UNICODE), 'request_header' => json_encode(request()->header(), JSON_UNESCAPED_UNICODE), 'ip' => request()->ip(), 'status_code' => 200, 'response_body' => json_encode($result, JSON_UNESCAPED_UNICODE), 'create_time' => date('Y-m-d H:i:s'), ]); } //最终做如下处理:在测试环境且传入的debug=1的参数,就返回html,否则返回json数据 //在测试环境可以单独用浏览器打开接口地址,传入debug=1的参数对接口进行调试 if (env('APP_DEBUG') && request()->param('debug')) { return json_encode($result, JSON_UNESCAPED_UNICODE); } else { return json($result); } } /** * 操作失败返回数据 * @param string $msg * @param int $code 错误码,为0表示没有错误,为1表示常规错误,前端仅需提示msg,其他值有具体含义,比如10401为未登录,前端需要跳转至登录界面 * @param array $data * @return \think\response\Json */ public function error($msg = '', $code = 1, $data = null) { $result = [ 'code' => $code, 'msg' => $msg, 'time' => time(), 'data' => $data ?? new \stdClass(), ]; //记录Api请求日志 if (app('http')->getName() === 'api') { Log::create([ 'rule' => request()->url(), 'request_body' => json_encode(request()->post(), JSON_UNESCAPED_UNICODE), 'request_header' => json_encode(request()->header(), JSON_UNESCAPED_UNICODE), 'ip' => request()->ip(), 'status_code' => 200, 'response_body' => json_encode($result, JSON_UNESCAPED_UNICODE), 'create_time' => date('Y-m-d H:i:s'), ]); } if (env('APP_DEBUG') && request()->param('debug')) { return json_encode($result, JSON_UNESCAPED_UNICODE); } else { return json($result); } } /** * 捕获异常后返回数据 * @param $e \Exception * @return \think\response\Json */ public function exceptionError($e){ $data = []; if(env('APP_DEBUG')){ $data = [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTrace() ]; } return $this->error($e->getMessage(), 1, $data); } }