🌂laravel8 中间件对处理返回结果或异常进行格式统一处理
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 协议》,转载必须注明作者和本文链接
推荐文章: