---
url: /docs/5.0/server/response.md
---
# 响应

CatchAdmin 为了统一整个后台的响应格式，对后台的响应数据格式做了代码层面的劫持，所有的响应数据以固定的格式进行输出，如下

### 成功响应(非分页)

| 字段    | 类型          | 说明     |
| ------- | ------------- | -------- |
| code    | int           | 返回码   |
| data    | Object|Array | 返回数据 |
| message | string        | 返回信息 |

### 错误响应

| 字段    | 类型   | 说明     |
| ------- | ------ | -------- |
| code    | int    | 返回码   |
| message | string | 返回信息 |

### 成功响应(分页格式)

| 字段    | 类型   | 说明         |
| ------- | ------ | ------------ |
| code    | int    | 返回码       |
| data    | Array  | 返回数据     |
| limit   | int    | 每页显示数量 |
| message | string | 返回信息     |
| total   | int    | 总数         |

使用者一般在控制器的方法返回结果就可以了，例如下面这样的

```php
public function index()
{
    return ['hello' => 'world'];
}
```

在控制器返回都是返回 success 的响应状态给前端，如果你需要错误响应，那么就需要使用异常

```php
public function index()
{
    throw new FaileException('处理异常');
}
```

具体实现可以参考我写的[博客文章-另辟蹊径！如何在 Laravel 更优雅的响应 JSON 数据 ](https://catchadmin.com/post/2024-03/laravel-unified-response)，利用 `Illuminate\Foundation\Http\Events\RequestHandled` 事件来 hook 整个响应内容实现，虽然有些绕口，但是在使用起来真的方便太多了。

## 自定义

从个人开发经验来说，一般来说，后台的响应格式不会有什么变化，除非出现特殊需求，需要特定的响应格式。CatchAdmin 提供了一个非常易用的操作来实现特定的响应格式

```php
use Catch\Support\ResponseBuilder;

public function index()
{
    return ResponseBuilder::success()->with('hello', 'world');
}

```

最后的响应的内容如下
![CatchAdmin  响应](https://image.catchadmin.com/202409131350017.png)

还可以这么使用，先使用 `code` 静态方法，然后再进行链式调用

```php
public function index()
{
    return ResponseBuilder::code(10000)
                ->with('hello', 'world')
                ->with('hi', 'world')
                ->data($data)
                ->message('Hello world');
}
```

这样就可以轻而易举的实现自定义响应内容了，一般没有特殊的数据格式，建议使用 CatchAdmin 默认的响应即可
