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中实现如上效果,或者您有更好的建议和思路。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

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

完整版,

国内segmentfault也有翻译的

4年前 评论
wxfphpest 4年前

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