Webman全局异常捕获处理

本文介绍了如何在Webman框架项目中实现全局异常捕获,通过创建自定义ApiException类并配置config/exception.php,确保在遇到错误时返回统一的json格式错误信息。
摘要由CSDN通过智能技术生成

最近在使用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 中启用上面的异常处理类即可。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webman 中,我们可以通过实现自定义异常处理器来处理应用程序抛出的异常。下面是一个简单的示例: 1. 创建一个自定义异常类 我们可以创建一个继承自 RuntimeException 的自定义异常类,比如: ```java public class MyException extends RuntimeException { public MyException(String message) { super(message); } } ``` 2. 创建一个异常处理器类 我们需要创建一个实现了 ExceptionHandler 接口的异常处理器类,并重写 handle() 方法,比如: ```java public class MyExceptionHandler implements ExceptionHandler { @Override public void handle(Exception e, Request request, Response response) { if (e instanceof MyException) { response.json("error", e.getMessage()); response.status(HttpStatus.INTERNAL_SERVER_ERROR_500); } else { response.status(HttpStatus.INTERNAL_SERVER_ERROR_500); } } } ``` 在上面的例子中,我们检查抛出的异常是否是我们自定义的 MyException 类型,如果是,我们将错误消息返回给客户端,并将响应状态设置为 500;否则,我们只是将响应状态设置为 500。 3. 注册异常处理器 最后,我们需要将刚刚创建的异常处理器注册到 Webman 应用程序中。我们可以通过调用 Application 类的 addExceptionHandler() 方法来实现,比如: ```java public class MyApp extends Application { @Override public void init() { addExceptionHandler(new MyExceptionHandler()); } } ``` 现在,当我们的应用程序抛出 MyException 类型的异常时,它将被 MyExceptionHandler 处理并返回适当的响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值