baethon / laravel-resource
Laravel API 资源便捷工厂
v1.0.2
2021-04-25 17:21 UTC
Requires
- illuminate/http: 7.*|8.*
- illuminate/support: 7.*|8.*
Requires (Dev)
- illuminate/database: ^8.33
- orchestra/testbench: ^6.15
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-05 18:28:35 UTC
README
此包提供便捷的工厂函数用于 Laravel API 资源。基于给定的模型,它将尝试找到对应的 API 资源并返回。如果资源不存在,它将使用基本 JsonResource
类。它与集合一起工作。
安装
composer require baethon/laravel-resource
示例用法
<?php namespace App\Http\Controllers; use function Baethon\Laravel\Resource\resource; class UserController { public function show(\App\Models\User $user) { return resource($user); } }
工厂也可以与条件加载一起工作
<?php namespace App\Http\Resources; use function Baethon\Laravel\Resource\resource; class UserResource extends \Illuminate\Http\Resources\Json\JsonResource { public function toArray($request) { return [ 'tags' => resource($this->whenLoaded('tags')), ]; } }
它是如何工作的?
此包试图遵循 Laravel 的命名约定。当为 User
模型创建资源时,它将寻找 UserResource
。当传递 User
实例的集合时,它将寻找 UserResourceCollection
或 UserCollection
。
在集合的情况下,此包不会将单个模型包裹在其各自的资源中。它将此责任传递给集合资源。
理由
当你决定使用 API 资源时,你应该为 API 返回的每个模型创建一个单独的资源。在许多情况下,它们没有任何扩展,创建一大堆空类似乎是没有意义的。
为了避免这种情况,你可能使用 JsonResource
来处理“通用”模型,只为包含任何逻辑的模型创建资源。然而,当需要为其中一个模型创建定制资源时,你必须更新之前使用 JsonResource
的所有地方。
这就是 resource()
发光的时候。你只需创建定制的资源,工厂就会自动开始使用它而不是基本资源。
定制
有两种方式可以定制工厂
- 自定义映射
- 自定义命名策略
要更改任何一项,您必须发布配置文件
php artisan vendor:publish --provider="Baethon\Laravel\Resource\ServiceProvider"
许可证
此包是开源软件,许可协议为 MIT 许可证。