laravel菜鳥一枚,寫API介面時,搜尋沒找到可直接使用的方案,自已寫了一個有需要拿走不謝,大神勿噴!
通過修改.evn的APP_DEBUG對返回結果格式統一處理
只在laravel8裡做了一下測試,其他的版本我也就不清楚了!
<?php
namespace App\Http\Middleware;
use Illuminate\Database\QueryException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ApiResponse
{
/**
* 對部分有安全隱患或者不能提示給客戶端的異常進行過濾,統一提示一個模糊的錯誤資訊
* @var string[]
*/
protected static $dontReport = [
QueryException::class,
\Exception::class
];
/**
* Handle an incoming request.
* api介面資料返回結果內容的處理
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$data = [
'code' => -100000,
'message' => '錯誤異常!'
];
if ($response instanceof JsonResponse) {
$data = ['data' => $response->getData(),
'code' => 100000,
'message' => ''
];
$response->setData($data);
return $response;
}
//如果是開啟除錯模式下,返回正常的錯誤提示頁面
if ((boolean)env('APP_DEBUG')) {
return $response;
}
//有異常的,並且不在忽略異常列表裡的異常進行資料格式化整理
if ($response instanceof Response && $response->exception && !in_array(get_class($response->exception), self::$dontReport)) {
$data = [
'data' => [],
'code' => $response->exception->getCode(),
'message' => $response->exception->getMessage()
];
}
//返回API介面格式的JSON異常資料
$response = new JsonResponse();
$response->setData($data);
return $response;
}
}
控制器裡的使用方法
public function demo()
{
//丟擲異常資料
# throw new RuntimeException('執行錯誤','-110');
//正常返回資料內容
return response()->json($result);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結