behamin / bresources
Behamin 基础和标准 API 响应格式 for Laravel
v2.3.0
2023-06-04 09:14 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- laravel/framework: ^8.67 || ^9.52 || ^10.13
Requires (Dev)
- orchestra/testbench: ^v6.27.1 || ^7.24 || ^8.5
README
Behamin 资源
Behamin API 响应的标准格式。
安装
composer require behamin/bresources
输出格式
资源
{ "data": { "id": 1, "email": "test@test.com" }, "message": "message", "error": { "message": "or error message", "errors": null } }
资源集合
{ "data": { "items": [], "count": 0, "sum": null }, "message": null, "error": { "message": null, "errors": null } }
请求验证错误(422 状态码)时
{ "data": null, "message": null, "error": { "message": "first error message in message bag", "errors": { "password": [ "password field is required." ] } } }
使用方法
使用 artisan 命令创建资源和请求,并将数据、消息、错误消息或计数传递给资源,如下所示示例
public function index(EmailFilter $filters) { list($emails, $count) = Email::filter($filters); $emails = $emails->get(); return EmailResource::collection(['data' => $emails, 'count' => $count]); }
public function show(Email $email) { return new EmailResource(['data' => $email, 'message'=> 'email info.']); }
您可以从资源类的 transformDataItem() 方法指定输出字段。
<?php namespace App\Http\Resources; use Behamin\BResources\Resources\BasicResource; class EmailResource extends BasicResource { protected function transformDataItem($item) { return [ 'id' => $item->id, 'email' => $item->email, 'status' => $item->status ]; } }
此外,您还可以使用 apiResponse() 辅助函数直接发送响应
class PhoneController { public function show(Phone $phone) { return apiResponse()->data($phone)->message('phone info.')->status(200)->get(); } public function index() { $phones = Phone::all(); return apiResponse()->collection($phones, $phones->count())->message('phone info.')->status(200)->get(); } public function update(Request $request, Phone $phone) { $isUpdated = $phone->update($request->all()); if (!$isUpdated) { return apiResponse()->errors('phone is not updated'); } return apiResponse()->data($phone)->message('phone is updated')->get(); } public function delete(Phone $phone) { $phone->delete(); return apiResponse()->message('phone info.')->next('https://debut.test')->status(200)->get(); } }
在上面的示例中,message 和 status 是可选的,它们的默认值分别是 null
和 200
。
资源
php artisan make:bresource ResourceClassName
请求
php artisan make:brequest RequestClassName