0

我正在使用dingo/api laravel 包来创建 API。

我想为success每个 API 调用添加关键响应。如果我们有错误,success: false并且一切正常,那么success: true.

最终响应必须如下所示:

{
"success":true,
"data": [{}, {}]
}

我知道有一种->setMeta($meta);方法可以像这样添加额外的键:

$meta = array(
    'success' => 'true',
    'status_code' => 200
);

return $this->response->collection($users, new UserTransformer)->setMeta($meta);

这会产生以下响应:

{
    "data": [{}, {}],
    "meta": {
        "success": true,
        "status_code": 200
    },
}

如您所见,在我不想要setMeta的键下添加了额外的键。meta

我阅读了它的响应文档,但找不到任何解决方案。

怎么做?

4

2 回答 2

1

我知道那是痛苦。经过几个小时的尝试。这就是我发现的。Dingo api 默认没有一致的 API 响应。对于所有成功结果,它只会返回数据和元数据,但对于错误,它将返回状态代码和消息(这是因为所有错误响应都使用异常处理程序)。

对于成功响应,您需要使用这种方式 https://github.com/dingo/api/wiki/Responses#morphing-and-morphed-events

这是事件侦听器,每个响应都会发出,它会首先改变响应。这样您就可以更好地控制响应的外观。例如

在 app/Listeners 目录下创建一个监听文件。

use Dingo\Api\Event\ResponseWasMorphed;

class AddSuccessKeyToResponse
{
    public function handle(ResponseWasMorphed $event)
    {
        $event->content['success'] = 1;

    }
}

在 app/Providers/EventServiceProvider.php 中添加监听事件

protected $listen = [
    'Dingo\Api\Event\ResponseWasMorphed' => [
        'App\Listeners\AddSuccessKeyToResponse'
    ]
];

对于错误响应,您只需要编辑 config/api.php 文件 errorFormat,以便所有异常处理程序错误响应将根据格式。例如

'errorFormat' => [
  'success' => false,
  'message' => ':message',
  'errors' => ':errors',
  'code' => ':code',
  'status_code' => ':status_code',
  'debug' => ':debug',
]
于 2017-08-20T14:48:46.550 回答
0

这将帮助你

$api->get('book/{id}', function ($id){
    $book = Book::FindOrFail($id);
    $_res['success'] = true;
    $_res['book'] = $book;
    return $_res;
});

并编辑 config/api.php

'errorFormat' => [
    'success' => false,
    'message' => ':message',
    'errors' => ':errors',
    'code' => ':code',
    'status_code' => ':status_code',
    'debug' => ':debug',
],
于 2017-06-05T12:42:16.837 回答