chuoke / response4laravel
Laravel 的响应助手。
Requires
- php: ^8.1
- illuminate/contracts: ^9.0
- spatie/laravel-package-tools: ^1.14.0
- symfony/http-foundation: ^6.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-10 00:11:54 UTC
README
此 Laravel 包可以帮助组织统一的 API 响应数据格式。它设计为能够解析所有类型的数据,包括 API 资源、集合和分页器。并且您可以自定义它。
安装
您可以通过 composer 安装此包
composer require chuoke/response4laravel
用法
导入响应对象
为了启用统一响应,我们通常定义一个 BaseController 并创建一个用于统一响应的辅助方法。
首先,在 BaseController 中使用辅助特质,其中有一个 response 方法,它返回 Chuoke\Response4Laravel\Response 实例对象。
顺便说一下,将来将根据情况添加更多辅助方法。
use Chuoke\Response4Laravel\Concerns\ResponseHelper;
或者创建您想要的辅助方法。这样,您可以很容易地自定义响应对象参数,详细的示例将在后面展示。
use Chuoke\Response4Laravel\Response; protected function apiResponse() { return Response::make(); }
接下来,您可以在控制器中使用它。
通用用法
根据一般情况,仅定义了最常见的状态的快捷方法。
$this->response()->ok(); // or $this->response()->ok($data) $this->response()->created($data, 'The data was created successfule!'); $this->response()->notFound('The data not exists'); $this->response()->badRequest('Your submit is wrong.');
请参阅代码以获取更多详细信息,如果缺少您所需的内容,请创建自定义响应类,或者如果有更多通用方法需要添加,请提交 PR。
响应资源
单个资源
$this->response()->ok($userResource); // output content: {"data":{"id":1,"name":"name"}}
默认情况下,如果没有使用包装,资源将不存在 data。
集合资源
$this->response()->ok($userCollectionResource); // output content: {"data":[{"id":1,"name":"name"},{"id":2,"name":"name2"}]}
data 总是存在。
并且您可以自定义 data 键。
$this->response()->collectionWrap('users')->ok($userCollectionResource); // output content: {"users":[{"id":1,"name":"name"},{"id":2,"name":"name2"}]}
数据包装器使用响应类中定义的第一个值,然后使用资源。如果没有定义,则单个资源不会被包装,但集合总是被包装。默认键名为
data,可以为单条数据和集合设置不同的值。
分页响应
$users = User::query()->paginate($request->get('per_page')); return $this->ok(UserResource::collection($users)); // output content: {"data":[{"id":1,"name":"user1"},{"id":2,"name":"user2"},{"id":3,"name":"user3"}],"links":{"first":"https://\/paginator?page=1","last":"https://\/paginator?page=4","prev":null,"next":"https://\/paginator?page=2"},"meta":{"current_page":1,"from":1,"last_page":4,"links":[{"url":null,"label":"« Previous","active":false},{"url":"https://\/paginator?page=1","label":"1","active":true},{"url":"https://\/paginator?page=2","label":"2","active":false},{"url":"https://\/paginator?page=3","label":"3","active":false},{"url":"https://\/paginator?page=4","label":"4","active":false},{"url":"https://\/paginator?page=2","label":"Next »","active":false}],"path":"https://\/paginator","per_page":3,"to":3,"total":10}}
自定义响应
在许多情况下,我们习惯于具有一致格式的响应数据。
protected function response() { return Response::make() ->responseUsing(function ($data, $status, $message) { return response()->json([ 'code' => $status, 'message' => $message ?: 'success', 'data' => is_array($data) && array_key_exists('data', $data) && count($data) === 1 ? $data['data'] : $data, ], 200); }); } // $this->response()->ok(new UserResource(User::first())); // output content: {"code":200,"message":"success","data":{"id":1,"name":"user1"}}
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请审查 我们的安全策略 了解如何报告安全漏洞。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。