资讯专栏INFORMATION COLUMN

Laravel+Dingo/Api 自定义响应

xcold / 2414人阅读

摘要:在最近的开发开发项目中,我使用了这个第三方库。是个很强大的库,但在开发的过程中,需要自定义响应字段。刚开始使用时,返回如下手机号格式不正确这是输入字段验证错误时,返回的结果。尤其是,需要对每一个对象进行新建,然后序列化。

在最近的开发开发项目中,我使用了Dingo/Api这个第三方Api库。
Dingo是个很强大的Api库, 但在开发的过程中,需要自定义响应字段。

刚开始使用Ding/Api时,返回如下:

{
    "message": "422 Unprocessable Entity",
    "errors": {
        "mobile": [
            "手机号格式不正确"
        ]
    },
    "status_code": 422
}

这是输入字段验证错误时,Dingo返回的结果。

这样看上去没什么问题。因为这边 status_code 是比较规范的。对于 PHP 来说,直接 json_decode 之后,并没有什么难办的地方。但是对面安卓和 IOS 则是使用的强类型语言。尤其是 Java,需要对每一个 Json 对象进行新建,然后序列化。所以,这种格式不统一的返回结果,是无法接受的

解决方法: 我们需要将所有的异常信息归总到一个地方,在AppServiceProviderboot()方法中添加

// 将所有的 Exception 全部交给 AppExceptionsHandler 来处理
app("api.exception")->register(function (Exception $exception) {
    $request = IlluminateHttpRequest::capture();
    return app("AppExceptionsHandler")->render($request, $exception);
}); 

然后在AppExceptionsHandler.php中的render()方法中:

$class = get_class($exception);
switch ($class) {
    case "DingoApiExceptionValidationHttpException":
        if ($request->expectsJson())
            return $this->errorRespond($exception->getErrors()->first(), $exception->getStatusCode());
        break;

    default:
        if ($request->expectsJson())
            return $this->errorRespond("系统休息了", 500000);

        break;
}

再次访问接口:

{
    "response_status_code": 422,
    "response_message": "请填写手机号",
    "data": []
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30097.html

相关文章

  • Laravel Api 开发系列 - Dingo API 的使用

    摘要:源码使用本文使用的数据库与基础篇相同,故不再重复说明。使用的用法与之前的自定义用法类似,甚至更加简单。首先定义路由如果要查看路由,需要使用创建控制器需要使用这个。 源码 使用 Dingo Api 本文使用的数据库与基础篇相同,故不再重复说明。 初始化 安装 $ composer require dingo/api:1.0.x@dev 注册 /config/app.php provide...

    jlanglang 评论0 收藏0
  • laravelDingo api如何Custom ExceptionHandler

    摘要:背景在近期使用处理接口时,发现本身中无法捕获异常。后来查阅资料发现,接管了请求的异常处理。导致无法自定义错误返回,很是头疼。最后在的找到了处理方法。 背景 在近期使用Dingo api处理接口时,发现laravel本身appExceptionsHandler中无法捕获异常。 后来查阅资料发现,Dingo api接管了api请求的异常处理。导致无法自定义错误返回,很是头疼。 最后在di...

    Ku_Andrew 评论0 收藏0
  • 五分钟入门 Dingo API

    摘要:虽然这个方案的目标是尽可能保持灵活性,但它仍然不能涵盖所有情况并解决所有问题。这个是调度器的,并提供了一些好用的辅助方法。如果有什么问题或者文章有哪些错误,请在评论区回复,及时阻止我误导他人。 showImg(https://segmentfault.com/img/bVbc1VY?w=1560&h=620); 基于 https://laravel-china.org/doc... 文...

    Paul_King 评论0 收藏0
  • laravel 5.4 + dingo api + jwt 代替Passport

    摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活来的,每个都试了一堆问题,到底你们做完有没有总结过一次然后有几个使用,完全不行啊,太监版不是我想要的。后来,终于找到例子并实测成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活来的,每个都试了一堆问题,到底你们做完有没有总结过一次?然后有几个使用lunmen+dingo api+jwt,完全不行啊,太监版不是我想要的。...

    _Zhao 评论0 收藏0
  • laravel5.5+dingo+JWT开发后台API

    摘要:我的博客中文文档中使用辅助文章参考这篇文章基本就能搭建出环境,我使用的版本跟他一样,不知道别的版本有啥大的区别,但是网上找的其他一些文章使用的是旧的版本,封装的东西路径可能不一样,可能会保错,有些文档还说要手动添加和,其实新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文档: https://www.bookstack....

    printempw 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<