TP6统一异常处理

本文探讨了项目中使用统一异常处理的重要性,包括提供友好的用户体验,简化前端处理,以及确保异常返回格式的一致性。已知异常如用户错误、权限问题等可以预见,而未知异常通常是不可预期的编程错误。推荐了一个实现异常处理的框架,并提供了详细的使用指南,强调在生产环境中配置APP_DEBUG为false。该框架支持自定义异常码和信息,异常类包含错误码、HTTP状态码和消息参数。
摘要由CSDN通过智能技术生成

统一异常处理

其实每个项目都是需要用到统一异常处理的, 如果项目返回给一大堆信息给
前端, 或者用户是极其不友好的

优点:

  1. 抛出自己项目的已知异常
  2. 捕获未知异常
  3. 统一返回格式

为什么要用统一异常处理

项目的返回格式应该需要格式化且统一, 不论是已知异常和未知异常
这样前端处理起来会比较方便, 也比较规范

什么是已知异常?

  1. 用户找不到
  2. 资源未能访问
  3. 权限不足
  4. 手机号格式错误

什么是未知异常?

未知异常 顾名思义就是无法预期的异常
参数不能为空, 没有做任何判断, 跑起来就会发生异常…

错误? 异常? 两者有什么区别

错误 不等于 异常
错误是很难规避的,
错误就是代表出错了 (1 / 0), 0是不能做分母的, 如果在动态条件下, 没有做任何限制
代码就会运行错误, 0不可以做除数这就是错误, 数据库未连接也是一种错误~~你如果预期到也不会报错了

此项目推荐的返回格式, 也是推荐的返回格式

{
  "code": 500,
  "message": "我们捕捉到一个未知的异常",
  "status_code": 99999,
  "url": "GET /user/info"
}

在此向大家推荐一个已经实现异常处理的框架

还在制作composer包, 敬请期待…
项目地址在这里: 项目地址点我

使用项目?

  • 查看 app/libs/exception有什么异常类
  • 在 app/libs/exception/ExceptionCode.php 文件中更新自己项目的异常码和异常信息
  • 在控制器使用 throw new ParamException(10001);
  • 创建.env文件 配置 APP_DEBUG = false 一定要是false, true是给开发者看的, 改成false是给用户和前端使用的
    throw new ParamException(10001);
    异常类有三个参数:
    1. 错误码
    2. Http状态码
    3. Message
    如果不传, 默认就是异常类定义好的

![\这是成功使用抛出异常的效果](https://img-blog.csdnimg.cn/f30729583f59446cb55bd5781c8f901a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5reL6Zuo5a62,size_20,color_FFFFFF,t_70,g_se,x_16

在ThinkPHP 6 (TP6) 中,自定义异常处理是一个重要的实践,它允许开发者创建自己的错误和异常处理器,以便更好地控制程序流程和提供更友好的错误信息。以下是TP6中自定义异常处理的基本步骤: 1. **创建异常类**:首先,你需要创建一个继承自`Illuminate\Foundation\Exceptions\Handler`的类,例如`App\Exceptions\CustomExceptionHandler`。在这个类中,你可以定义具体的异常处理逻辑。 ```php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable; class CustomExceptionHandler extends ExceptionHandler { // ... 自定义处理方法 ... public function render($request, Throwable $exception) { return parent::render($request, $exception); } // 添加其他处理方法,如记录日志、返回特定错误页面等 } ``` 2. **注册异常处理类**:在`app/Http/Kernel.php`文件中,你需要将你的自定义异常处理器注册到`$container->resolve('Illuminate\Contracts\Http\Kernel')->setException_handler()`函数里。 ```php protected $exception_handlers = [ // 其他已存在的异常处理器... \App\Exceptions\CustomExceptionHandler::class, ]; ``` 3. **异常响应**:在`render`方法中,你可以定制异常的响应格式,比如使用JSON格式返回错误信息,或者渲染特定的视图。 ```php public function render($request, Throwable $exception) { if ($exception instanceof CustomException) { // 对于自定义的异常,可以有专门的处理逻辑 return response()->json([ 'message' => $exception->getMessage(), 'code' => $exception->getCode(), ], $exception->getStatusCode()); } // 使用默认的异常处理逻辑 return parent::render($request, $exception); } // ... 其他自定义处理逻辑... ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值