abdulrhmansouda / laravel-customizable-api-resource
此包帮助 Laravel 开发者自定义 API 资源。
1.1.1
2024-07-08 20:49 UTC
Requires
Requires (Dev)
- orchestra/testbench: ^9.0
README
此包提供了一种灵活的方式来自定义 API 资源响应,根据用户的请求,可以包含或排除特定的资源字段。
安装
要安装此包,请使用 Composer
composer require abdulrhmansouda/laravel-customizable-api-resource
用法
创建一个新的资源类,实现 Customizable
接口并使用 CustomizableApiResource
特性
<?php namespace App\Http\Mobile\V1\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\MissingValue; use LaravelCustomizableApiResource\Customizable; use LaravelCustomizableApiResource\CustomizableApiResource; class TestResource extends JsonResource implements Customizable { use CustomizableApiResource; // replace toArray method with basicResource method public function basicResource(Request $request): array { return [ 'id' => $this->id, 'name' => $this->name, ]; } // a custom subResource public function secretSubResource(): array { return [ 'ownerName' => $this->owner_name, 'user' => UserResource::make($this->whenLoaded('user')), ]; } // another custom subResource public function someDetails($parameters): array { return [ 'moreDetail' => $this->more_detail, 'somePassedDetailAsParameters' => $parameters['somePassedDetailAsParameters'], ]; } }
在您的路由中,可以使用 customMake
和 customCollection
方法创建具有所需配置的资源实例
Route::get('test', function () { $ad = Ad::with('user')->first(); return TestResource::customMake($ad, [ 'secretSubResource', 'someDetails' => [ 'somePassedDetailAsParameters' => 'detail one', ], ]); });
这是输出
{ "data": { "id": 1, "name": "name", "ownerName": "ownerName", "user": { "id": 2, "name": "ahmend" } } }
处理集合
Route::get('test', function () { $ad = Ad::limit(10)->get(); return TestResource::customCollection($collection, [ 'secretSubResource', ]); });
这是输出
{ "data": [ { "id": 1, "name": "name", "ownerName": "ownerName" }, { "id": 1, "name": "name", "ownerName": "ownerName" } ] }
您可以创建尽可能多的函数。此外,您还可以更改 secretSubResource
和 someDetails
的名称。