我使用dingo/api laravel包创建API。
我想为每个API调用添加success
密钥响应。如果我们收到错误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
密钥下添加了我不想要的额外密钥。
我引用了它Responses documentations,但我找不到任何解决方案。
怎么做?
答案 0 :(得分:1)
我知道这很痛苦。经过几个小时的尝试。这就是我发现的。 Dingo api默认没有一致的API响应。对于所有成功结果,它只返回数据和元数据,但是对于错误,它将返回状态代码和消息(这是因为所有错误响应都使用异常处理程序)。
要获得成功,您需要使用这种方式 https://github.com/dingo/api/wiki/Responses#morphing-and-morphed-events
这是事件监听器,每个响应发出,它将首先变形响应。这样您就可以更好地控制响应的样子。 e.g
在app / Listeners目录下创建一个监听器文件。
use Dingo\Api\Event\ResponseWasMorphed;
class AddSuccessKeyToResponse
{
public function handle(ResponseWasMorphed $event)
{
$event->content['success'] = 1;
}
}
在app / Providers / EventServiceProvider.php中添加listen事件
protected $listen = [
'Dingo\Api\Event\ResponseWasMorphed' => [
'App\Listeners\AddSuccessKeyToResponse'
]
];
对于错误响应,您只需编辑config / api.php文件errorFormat,以便所有Exception处理程序错误响应将根据格式。 e.g
'errorFormat' => [
'success' => false,
'message' => ':message',
'errors' => ':errors',
'code' => ':code',
'status_code' => ':status_code',
'debug' => ':debug',
]
答案 1 :(得分: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',
],