美文网首页
ThinkPHP6.0异常处理

ThinkPHP6.0异常处理

作者: 皮蛋馅儿 | 来源:发表于2020-04-04 15:36 被阅读0次

在实际开发过程中,我们可能遇到很多不可预知的异常,比如未定义的变量等,api接口定义了统一的数据结构返回,如果直接抛出异常,前端可能识别不了导致系统崩溃,所以我们要针对异常进行处理,保证代码健壮性。

1、在\app\ExceptionHandle.php的render方法可以直接处理返回异常格式

public function render($request, Throwable $e): Response
{
    // 添加自定义异常处理机制
    $result = [
        'code' => 0,
        'message' => $e->getMessage(),
        'data' => []
    ];
    return json($result, 400);
}

2、以上方法是针对公共异常处理,如果只是想对多应用模块下的api模块进行这种格式的异常返回,可以通过以下方法:
在api模块下新建exception文件夹,并且在exception下面创建Http.php文件,代码如下:

<?php

namespace app\api\exception;

use think\exception\Handle;
use think\Response;
use Throwable;

/**
 * 不可预知的异常处理
 * Class Http
 * @package app\api\exception
 */
class Http extends Handle
{
    public $httpStatus = 500;

    public function render($request, Throwable $e): Response
    {
        // http状态码获取,比如throw new \think\exception\HttpException(400, '无效请求')设置了状态码
        if (method_exists($e, 'getStatusCode')) {
            $httpStatus = $e->getStatusCode();
        } else {
            $httpStatus = $this->httpStatus;
        }

        // 添加自定义异常处理机制
        $result = [
            'code' => 0,
            'message' => $e->getMessage(),
            'data' => []
        ];
        return json($result, $httpStatus);
    }
}

在\app\api下新建provider.php,并添加如下代码

<?php

use app\api\exception\Http;

// 容器Provider定义文件
return [
    'think\exception\Handle' => Http::class,
];

测试未定义变量异常:
在\app\api\controller\Index.php,添加代码

<?php

namespace app\api\controller;

use app\BaseController;

class Index extends BaseController
{
    public function index()
    {
        echo $a;
    }
}

返回:

{"code":0,"message":"Undefined variable: a","data":[]}

测试抛出异常:

<?php

namespace app\api\controller;

use app\BaseController;

class Index extends BaseController
{
    public function index()
    {
        throw new \think\exception\HttpException(400, '无效请求');
    }
}

返回:

{"code":0,"message":"无效请求","data":[]}

并且F12调试模式下,可以看到相应的HTTP状态码也发生变化

加我微信公众号:\color{red}{皮蛋馅儿},一起学习哦~

相关文章

  • ThinkPHP6.0异常处理

    在实际开发过程中,我们可能遇到很多不可预知的异常,比如未定义的变量等,api接口定义了统一的数据结构返回,如果直接...

  • ThinkPHP6.0无效请求处理

    1、处理不存在的方法在\app\BaseController.php文件,添加如下代码: 访问一个不存在的方法,结...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • Java 异常

    异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...

  • 第十二章:异常处理

    异常处理语法格式: try: ...处理语句 except 异常类型: ...异常处理语句 pytho...

  • Spring MVC 全局统一异常处理(注解方式)

    全局异常处理 对异常处理类增加@ControllerAdvice 增加异常处理方法,使用@ExceptionHan...

  • 异常处理设计文档

    一、异常处理流程说明 在ESB处理过程中,若发生异常,将进入异常流程的处理。一个异常处理流程大致如下: ESB处理...

  • Java异常处理机制

    什么是异常处理机制: 异常处理机制: 让程序发生异常时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序尽...

  • ASP .NET Core Web API_05_异常处理

    默认异常处理 自定义异常处理

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

网友评论

      本文标题:ThinkPHP6.0异常处理

      本文链接:https://www.haomeiwen.com/subject/xgrjphtx.html