最近在使用webman这个框架做项目开发,涉及到需要统一处理异常捕获。由于官网给的并不详细,于是自己实现了一下全局异常处理类。
一、配置效果
例如:我要在项目中统一返回
json
格式数据,并不想在业务层写try,catch逻辑。
或者在业务代码中不小心写出了非语法错误而导致的异常。如在项目中将被除数存在0值的情况而引发的错误。
如在控制器中写了如下代码:
public function testException(){ $i =5/0;return json(['code' => 0, 'msg' => 'ok']);}
正常请求则报错如下
启用自定义异常后则提示如下:
二、配置方法
- 1、新建
app/exception/ApiException.php
<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2024-03-22* Time: 13:30*/
namespace app\exception;use Webman\Exception\ExceptionHandler;
use Webman\Http\Request;
use Webman\Http\Response;
use Throwable;class ApiException extends ExceptionHandler
{public function render(Request $request, Throwable $e): Response{// 处理http 异常 if ($e instanceof \HttpException) {return json(['code'=>0,'msg'=>'http请求失败:'.$e->getMessage(),'data'=>[],'url'=>'','wait'=>3]);}// 可以继续处理其他异常 // .........return json(['code'=>0,'msg'=>'发生了异常:'.$e->getMessage(),'data'=>[],'url'=>'','wait'=>3]);}
}
- 2、启用自定义异常处理类
配置config/exception.php
如下
<?phpreturn ['' => app\exception\ApiException::class,
];
如果您需要在其他插件下启用此异常处理类,只需在插件目录下的
config/exception.php
中启用上面的异常处理类即可。