hamidmp / dualresource
DualResource - 请求和响应的参数映射器
v1.0.1
2021-12-30 11:38 UTC
Requires
- php: ^7.4|^8.0
This package is not auto-updated.
Last update: 2024-09-20 01:26:47 UTC
README
DualResource 是 Laravel Resource 的一个派生类。Laravel Resource。
通过 DualResource,除了 API Resource 可以做到的,你还可以使用相同的模板将请求数据映射到数组。
- 映射请求数据到新数组
- 将模型映射到 json
安装
通过 Composer 需要
composer require hamidmp/dualresource
用法
class Person { // firstName, lastName, city, ... public function cars(){ return $this->hasMany(Car::class); } } class Car { // person_id, name, model, ... }
1. 在客户端(API 或 UI)中使用 fname 和 lname 代替 firstName 和 lastName
class PersonDualResource extends DualResource { protected function mapFields() { return [ 'fname'=>'fisrtName', 'lname'=>'lastName', ]; } }
$data = PersonDualResource::fromRequest($request)->getParameters(); //$request contained: fname, lname //$data will contain: firstName , lastName
注意:方法 mapFields 将生成 toArray 方法,你不需要更改它。
2. 关联使用
class PersonDualResource extends DualResource { protected function mapFields() { return [ 'fname'=>'fisrtName', 'lname'=>'lastName', 'car_list'=>['cars',CarDualResource::class], ]; } }
$data = PersonDualResource::fromRequest($request)->getParameters(); //$request contained: fname, lname, car_list:[ {name, model},... ] //$data will contain: firstName , lastName, cars=>[ [name,model],... ]
3. 使用匿名函数进行映射
class PersonDualResource extends DualResource { protected function mapFields() { return [ 'fname'=>'fisrtName', 'lname'=>'lastName', 'car_list'=>['cars',function($key){ //for response return CarDualResource::collection($this->{$key}); },function($data){ //for request return CarDualResource::fromRequestData($data); }], ]; } }
注意:你可以通过返回 null 值来忽略每个函数:return null;
4. 作为正常的资源类使用(用于响应)
$person=\App\Models\Person::with('cars')->find(1); return \App\Http\Resources\PersonDualResource::fromModel($person)->response();
方法
- 准备类
//Declaring assign-map between model and data //return array protected function mapFields()
- 从请求数据
//Preparing DualResource for mapping data from request public static function fromRequest(Request $request) //return array of mapped request data public function getParameters($extra=[], $defaults=[]) //return array of mapped request data plus other ones public function getAll($extra=[], $defaults=[])
- 准备为响应(json)
//return a new resource instance from one model public static function fromModel(...$parameters) //return a new anonymous resource collection from Models public static function fromModels($resource)
许可证
DualSource 库是开源软件,许可协议为 MIT 许可协议。