如果要在成功的情况加上业务 code 和 message 呢?

请问一下,如果前端需求成功的时候,也加上 业务 code 码 和 成功 的 message 应该如何加入进去呢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 15
你看我吊吗啊

可以用 response() 也可以自定义啊~

6年前 评论

@JeffLi 那么dingo 里面的 transformer 还能用上吗?

6年前 评论

@dptms API请求成功后返回的是你在 transformer 中定义的变量,你可以在其中自定义返回的 message。除了这些你还可以在对应的 controller 中通过 setMeta()setStatusCode() 函数来携带你想要的 Code 以及教程中所提到的信息。

6年前 评论

@zssen setMeta() 是有 meta 包裹的吧?还有 setStatusCode() 只能设置http状态码吧?业务状态码的话 如果在transformer 里面写的话感觉怪怪的

6年前 评论

@dptms 如果你要改变 HTTP 请求的状态码, 2* 的可以用 setStatusCode() 设置,4*5* 的需要在抛出的异常中自定义错误码,建议从 vendor/tymon/src/JWT.php 看起,JWT 封装了不同的异常,都对应着不同的 code 码。

6年前 评论

@zssen 谢谢哥对我耐心的解释,我现在的需求是,我用的这个 api 教程的方法,在 transformer 方法

return $this->response->item($user, new UserTransformer());

返回的格式如下

{
    data:{
       "id":1,
       "nickname":"dp~",
       "avatar":"https://wx.qlogo.cn/mmopen/vi_32/u5",
       "sex":"1",
       "birthday":"未填写",
       "live_place":"未填写",
       "sign":"未填写",
       "created_at":"2018-04-18 10:47:57",
       "updated_at":"2018-04-18 10:48:23"
     }
}

我想加上 自己的业务 codecode:20001 , message:成功这样子的跟 data 平级。

6年前 评论

你其实是想在不消除 data 这个 key 的时候,加入自定义的 code,保持跟 data 同级。但目前来说好像并没有很好的办法解决。教程中有讲到通过 composer liyu/dingo-serializer-switch 这个插件使响应结果更好看,也就没 data 这个 key 了, 然后你再把你要的 code 和 message 加到 transformer 中,也能保持你想要自定义的 code 是最顶级。其他的办法目前想不到了。就会是这种形式

{
       "id":1,
       "nickname":"dp~",
       "avatar":"https://wx.qlogo.cn/mmopen/vi_32/u5",
       "sex":"1",
       "birthday":"未填写",
       "live_place":"未填写",
       "sign":"未填写",
       "created_at":"2018-04-18 10:47:57",
       "updated_at":"2018-04-18 10:48:23",
       "code":2001,
       "message":"成功"
}
6年前 评论

@dptms 小哥找到解决办法了吗。我跟你有相同的需求

6年前 评论

@mouse 是的,请问你是怎么实现的?

6年前 评论
xdstack

有什么好的办法么?

6年前 评论

我的做法是用中间件实现

try {
    $response = $next($request);
    if ($response instanceof Response) {
        if ($response->exception instanceof Exception) {
            throw $response->exception;
        }

        $content = $response->getOriginalContent();

        if (is_array($content)) {
            if (!array_has($content, 'code')) {
                $content['code'] = $response->getStatusCode() * 100;
            }
            if (!array_has($content, 'message')) {
                $content['message'] = '成功!';
            }
            $response->setContent($content);
        }
    }
    return $response;
} catch (Exception $exception) {
    $code = ($exception instanceof HttpExceptionInterface) ? $exception->getStatusCode() : 500;

    $message = $exception->getMessage();

    Log::error('dafy.error', compact('message'));

    if (str_contains($message, 'SQLSTATE')) {
        $message = '服务器内部错误';
    }

    return new JsonResponse([
        'data' => [
            'message' => $message,
        ],
        'message' => $message,
        'code' => (int)($code * 100),
    ]);
}
6年前 评论

你是指的这种格式吗?

file

我这里没有使用教程的方法 而是使用的laravel框架自带的API资源

是用命令生成资源 php artisan make:resource User
下面的是我的资源编辑以及方法调用

资源:
file
控制器:

file

得到的响应就是第一张截图的效果, 希望对你有帮助我也还摸索中实验,一起加油!

5年前 评论

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