dingo 开发 API 异常处理的封装问题

从TP转到laravel中一年多了,非常喜欢laravel这个框架。但是在做TP项目中有一些很好的做法不知道如何转到laravel 开发中。

最近使用dingo开发api接口,dingo封装了很多非常方便的方法,但是在处理接口返回异常时觉的我在TP中的异常处理思路更清晰规范,但不知道如何在dinggo中实现。

下面我说一下我在TP中的思路

接口请求的异常分为了两类:(1)服务器内部异常,显示通用错误,并记录日志。(2)用户请求操作异常,抛出错误信息 code(http状态码)errorCode(自定义异常码) msg(异常信息)。

重写了TP异常处理handle

代码实现如下:

/*
 * 重写Handle的render方法,实现自定义异常消息
 */
class ExceptionHandler extends Handle
{
    private $code;
    private $msg;
    private $errorCode;

    public function render(Exception $e)
     {
     //BaseException 为自定义异常基类,其他异常类继承它
        if ($e instanceof BaseException)
        {
            //如果是自定义异常,则控制http状态码,不需要记录日志
            $this->code = $e->code;
            $this->msg = $e->msg;
            $this->errorCode = $e->errorCode;
        }
        else{
            // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志
            if(config('app_debug')){
                // 调试状态下直接显示原始tp异常页面
                return parent::render($e);
            }
            $this->code = 500;
            $this->msg = '服务器内部错误';
            $this->errorCode = 999;
            //记录错误日志
            $this->recordErrorLog($e);
        }
               $result = [
            'msg'  => $this->msg,
            'error_code' => $this->errorCode,
            'request_url' => xxx
        ];
        return json($result, $this->code);
    }

使用方式

定义自定义异常类

OrderException.php

class OrderException extends BaseException
{
    public $code = 404;
    public $msg = '订单不存在,请检查ID';
    public $errorCode = 80000;
}

异常的抛出

throw new OrderException(); //抛出订单异常错误

throw new \Exception();//抛出系统异常

请教各位laravel 的老鸟 , 我如何在dingo中实现如上效果,或者您有更好的建议和思路。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

写一个类继承dingo自带的exception handler,重写handle方法,然后在容器里注册一下就可以,随便搜一下网上就有
github地址,

完整版,

国内segmentfault也有翻译的

4年前 评论
wxfphpest 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!