Files
cunkebao_v3/Moncter/app/utils/ApiResponseHelper.php

138 lines
3.5 KiB
PHP
Raw Normal View History

2026-01-05 10:16:20 +08:00
<?php
namespace app\utils;
/**
* API 响应辅助工具类
*
* 提供统一的 API 响应格式
*/
class ApiResponseHelper
{
/**
* 判断是否为开发环境
*
* @return bool
*/
protected static function isDevelopment(): bool
{
return config('app.debug', false) || env('APP_ENV', 'production') === 'development';
}
/**
* 成功响应
*
* @param mixed $data 响应数据
* @param string $message 响应消息
* @param int $httpCode HTTP状态码
* @return \support\Response
*/
public static function success($data = null, string $message = 'ok', int $httpCode = 200): \support\Response
{
$response = [
'code' => 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<string, mixed> $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<string, string> $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);
}
}