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中实现如上效果,或者您有更好的建议和思路。
你解决了嘛?
写一个类继承
dingo
自带的exception handler
,重写handle
方法,然后在容器里注册一下就可以,随便搜一下网上就有github地址,
完整版,
国内segmentfault也有翻译的