0, 'msg' => $message, ]; if ($data !== null) { $response['data'] = $data; } return json($response, $httpCode); } /** * 错误响应 * * @param string $message 错误消息 * @param int $code 错误码(业务错误码,非HTTP状态码) * @param int $httpCode HTTP状态码 * @param array $extra 额外信息 * @return \support\Response */ public static function error( string $message, int $code = 400, int $httpCode = 400, array $extra = [] ): \support\Response { $response = [ 'code' => $code, 'msg' => $message, ]; // 开发环境可以返回更多调试信息 if (self::isDevelopment() && !empty($extra)) { $response = array_merge($response, $extra); } return json($response, $httpCode); } /** * 异常响应 * * @param \Throwable $exception 异常对象 * @param int $httpCode HTTP状态码 * @return \support\Response */ public static function exception(\Throwable $exception, int $httpCode = 500): \support\Response { // 记录错误日志 LoggerHelper::logError($exception); $code = 500; $message = '内部服务器错误'; // 根据异常类型设置错误码和消息 if ($exception instanceof \InvalidArgumentException) { $code = 400; $message = $exception->getMessage(); } elseif ($exception instanceof \RuntimeException) { $code = 500; $message = $exception->getMessage(); } $response = [ 'code' => $code, 'msg' => $message, ]; // 开发环境返回详细错误信息 if (self::isDevelopment()) { $response['debug'] = [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'trace' => $exception->getTraceAsString(), ]; } return json($response, $httpCode); } /** * 验证错误响应 * * @param array $errors 验证错误列表 * @return \support\Response */ public static function validationError(array $errors): \support\Response { $message = '参数验证失败'; if (!empty($errors)) { $firstError = reset($errors); $message = is_array($firstError) ? $firstError[0] : $firstError; } $response = [ 'code' => 400, 'msg' => $message, 'errors' => $errors, ]; return json($response, 400); } }