Files
cunkebao_v3/Moncter/app/utils/ApiResponseHelper.php
2026-01-05 10:16:20 +08:00

138 lines
3.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
}