laravel+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默认的异常页面,因为TP的默认页面
                // 很容易看出问题
                return parent::render($e);
            }

            $this->code = 500;
            $this->msg = '服务器内部错误';
            $this->errorCode = 999;
            //记录错误日志
            $this->recordErrorLog($e);
        }
//如果为自定义异常,返回如下代码
        $request = Request::instance();
        $result = [
            'msg'  => $this->msg,
            'error_code' => $this->errorCode,
            'request_url' => $request = $request->url()
        ];
        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中实现如上效果,或者您有更好的建议和思路。### 问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进