baethon/laravel-resource

Laravel API 资源便捷工厂

v1.0.2 2021-04-25 17:21 UTC

This package is auto-updated.

Last update: 2024-09-05 18:28:35 UTC


README

Example

此包提供便捷的工厂函数用于 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 实例的集合时,它将寻找 UserResourceCollectionUserCollection

在集合的情况下,此包不会将单个模型包裹在其各自的资源中。它将此责任传递给集合资源。

理由

当你决定使用 API 资源时,你应该为 API 返回的每个模型创建一个单独的资源。在许多情况下,它们没有任何扩展,创建一大堆空类似乎是没有意义的。

为了避免这种情况,你可能使用 JsonResource 来处理“通用”模型,只为包含任何逻辑的模型创建资源。然而,当需要为其中一个模型创建定制资源时,你必须更新之前使用 JsonResource 的所有地方。

这就是 resource() 发光的时候。你只需创建定制的资源,工厂就会自动开始使用它而不是基本资源。

定制

有两种方式可以定制工厂

  1. 自定义映射
  2. 自定义命名策略

要更改任何一项,您必须发布配置文件

php artisan vendor:publish --provider="Baethon\Laravel\Resource\ServiceProvider"

许可证

此包是开源软件,许可协议为 MIT 许可证