最近在使用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
如下
<?php
return [
'' => app\exception\ApiException::class,
];
如果您需要在其他插件下启用此异常处理类,只需在插件目录下的
config/exception.php
中启用上面的异常处理类即可。