Thinkphp6中位于app目录下有一个文件ExceptionHandle.php,这个文件就是整个项目的异常处理文件,所有程序抛出异常,均会定位到这个文件中的render方法中,你可以在这里进行全局的异常处理。
但是这个文件的作用域是整个项目,针对目前的api模块来说需要的是JSON格式的错误信息,后期开发前台的时候就不需要JSON格式的信息了,可能是一个前端小姐姐写的页面。
于是乎,就需要针对api模块新增异常处理
在api目录下增设一个Exception目录
??![](https://img-blog.csdnimg.cn/bc4b2005867649e08adc8ca354ae57ef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZGA5ZOI7oSF,size_20,color_FFFFFF,t_70,g_se,x_16)
?
上面的异常处理类文件随便起,但是要有意义
在这个类的render方法中完成异常捕获后的处理
public function render($request, Throwable $e): Response
{
// 统一将异常以json格式返回
return fail($e->getMessage());
}
将异常类注册到服务容器中
![](https://img-blog.csdnimg.cn/5009bd1be9a640179b158a7533aee897.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZGA5ZOI7oSF,size_20,color_FFFFFF,t_70,g_se,x_16)
?
<?php
use app\Request;
// 容器Provider定义文件
return [
'think\Request' => Request::class,
'think\exception\Handle' => \app\api\Exception\ApiException::class
];
上面就完成了,当api模块下抛出异常时,就会主动寻找ApiException这个文件进行特殊的JSON抓换
效果
![](https://img-blog.csdnimg.cn/51a264f1f71a445b8b5b4c5dedb0afaf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZGA5ZOI7oSF,size_20,color_FFFFFF,t_70,g_se,x_16)
?
|