🌂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 协议》,转载必须注明作者和本文链接
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
噜噜生活
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!