返回的数据想要包裹多的 code 和 message 两项,该怎么处理?

  • 我想要做成如下的通用json返回格式在dingo或者transformer中应该怎么做?
    {
    "code": 0,
    "message": "登录成功",
    "data": {
        "object":$object
    }
    }
  • 我试了在transformer中设置两个属性 code 和message ,通过构造方法传入这两个值,但会遇到如果获取多个用户的话,就会有问题,每个数据都会带上code 和message。我现在需要的是只带一个code 和message的情况,请问有什么方法可以设置?
  • transformer中代码如下

    protected $code;
    protected $message;
    
    public function __construct($code, $message)
    {
        $this->code = $code;
        $this->message = $message;
    }
    
    public function transform(User $user)
    {
        return [
            'code' => $this->code,
            'message' => $this->message,
            'data' => [
                'id' => $user->id,
                'name' => $user->name,
                'email' => $user->email,
                'created_at' => $user->created_at->toDateTimeString(),
                'updated_at' => $user->updated_at->toDateTimeString()
            ]
        ];
    }
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
liyu001989
最佳答案

对于 200 系列的响应,code 和 message 没有意义,判断状态码就行了。

不推荐这么干,如果你非要这么干:

  1. 添加到 meta 里面;
  2. 修改 config/api.php 的 format,写一个你自己的类,继承一下,重写 encode:

    file

    file

    file

5年前 评论
讨论数量: 16
liyu001989

对于 200 系列的响应,code 和 message 没有意义,判断状态码就行了。

不推荐这么干,如果你非要这么干:

  1. 添加到 meta 里面;
  2. 修改 config/api.php 的 format,写一个你自己的类,继承一下,重写 encode:

    file

    file

    file

5年前 评论
Rick946

@liyu001989 首先感谢老师的指导!
下面代码是我的改进,可以在具体的controller里给code和message动态赋值
controller中具体方法如下:

file
Json.php中encode方法改造如下:

file
响应如下:

{
    "code": 0,
    "data": {
        "unionId": "nine",
        "fiCard": 1,
        "sCard": 2,
        "tCard": 3,
        "foCard": 4
    },
    "message": "OK"
}
5年前 评论
liyu001989

对于 200 系列的响应,code 和 message 没有意义,判断状态码就行了。

不推荐这么干,如果你非要这么干:

  1. 添加到 meta 里面;
  2. 修改 config/api.php 的 format,写一个你自己的类,继承一下,重写 encode:

    file

    file

    file

5年前 评论

谢谢,完美解决问题
我刚才就在想有不有必要添加code和message的问题。
我也有试过加到meta里面,但感觉有点儿四不像。

5年前 评论

@liyu001989 这个code 和 message 的问题可不可以单独拿一篇文章细说一下,感觉困惑了很多人啊

5年前 评论
liyu001989

https://learnku.com/courses/laravel-advanc...

事实是,仅有个别的人一定要增加 code 和 message

5年前 评论
QIN秦同学

但是写接口如果不写code和message,一个用户名密码错误前端判断状态码系统就崩了,这个问题我还是没有解决,有解决的吗?是怎样解决的呢

5年前 评论

@echofree313 老师上面不是已经提供了解决的方案了吗?

5年前 评论
QIN秦同学

@Flourishing 我按照老师的方法改了一下,并木有效果呢,在encode添加那几个哈?

5年前 评论
QIN秦同学

我做了没有什么效果呢,是缺少了什么步骤吗

5年前 评论
Rick946

@liyu001989 大神好,我是小白,请问您这种写法中status_code和message是写死的吧?如何在controller中动态配置呢?

5年前 评论
liyu001989

@Rick946 想办法改造这个类呗,传参数进去。

5年前 评论
Rick946

@liyu001989 首先感谢老师的指导!
下面代码是我的改进,可以在具体的controller里给code和message动态赋值
controller中具体方法如下:

file
Json.php中encode方法改造如下:

file
响应如下:

{
    "code": 0,
    "data": {
        "unionId": "nine",
        "fiCard": 1,
        "sCard": 2,
        "tCard": 3,
        "foCard": 4
    },
    "message": "OK"
}
5年前 评论

@liyu001989 没有状态码,在一些情况下,采用 Laravel 的表单验证的时候,返回信息如下:

{
    "message": "422 Unprocessable Entity",
    "errors": {
        "nickname": [
            "用户名长度最大为12个字符"
        ]
    },
    "status_code": 422
}

例如注册的时候提示手机号码已经存在了,没有 code 区分业务状态,前端应该怎么处理?
是要判断 message 信息吗?

5年前 评论
liyu001989

@十七岁程序员想当歌手

可以有自定义的 code,自己抛出异常时候增加 code 就行。但是如果你使用的是验证类,可能需要自行改造一下

file

5年前 评论

@Rick946 老铁,你是如何重写encode的?我重写会报错

file

file

5年前 评论
Rick946

@bossaiguo 我是直接改的/vendor/dingo/api/src/Http/Response/Format/Json.php文件最下面的encode方法,按照我截图的改

5年前 评论

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