mohamed-ibrahem/advanced-json-resource

此包的最新版本(v0.9.0)没有可用的许可信息。

高级JSON Laravel资源

v0.9.0 2023-03-08 11:45 UTC

This package is auto-updated.

Last update: 2024-09-08 15:30:22 UTC


README

Latest Version on Packagist Total Downloads run-tests

通过为每种响应类型创建方法来为您的Laravel应用程序创建高级JSON响应,例如 toIndextoShowtoForm 或自定义方法名称!还有 shared 方法用于所有共享属性。

安装

您可以通过composer安装此包

composer require mohamed-ibrahem/advanced-json-resource 

用法

每个资源都应该扩展 AdvancedJsonResponse\ApiResource 类。

现在,根据您的响应类型,您可以创建方法。然后在控制器中调用这些方法,使用snake case,开头不包含 to

示例

use AdvancedJsonResource\ApiResource;
use App\Models\User;
use Illuminate\Http\Request;

/**
 * @mixin User
 */
class UserResource extends ApiResource
{
    /**
     * {@inheritdoc}
     *
     * @param Request $request
     * @return array<string, mixed>
     */
    public function toIndex(Request $request): array
    {
        return [
            'name' => $this->name,
        ];
    }

    /**
     * {@inheritdoc}
     *
     * @param Request $request
     * @return array<string, mixed>
     */
    public function toShow(Request $request): array
    {
        return [
            'email' => $this->email,
        ];
    }

    /**
     * {@inheritdoc}
     *
     * @param Request $request
     * @return array<string, mixed>
     */
    public function toForm(Request $request): array
    {
        return [
            'can_update' => true,
        ];
    }

    /**
     * This is a custom response method.
     *
     * @param Request $request
     * @return array<string, mixed>
     */
    public function toCustom(Request $request): array
    {
        return [
            'custom' => 'custom',
        ];
    }

    /**
     * {@inheritdoc}
     *
     * @param Request $request
     * @return array<string, mixed>
     */
    public function shared(Request $request): array
    {
        return [
            'id' => $this->id,
        ];
    }
}

在控制器中

use App\Models\User;
use App\Http\Resources\UserResource;
use Illuminate\Http\Request;

class UserController
{
    public function index(): UserResource
    {
        return UserResource::index(
            User::all(),
        );
    }

    public function store(Request $request): UserResource
    {
        //...

        return UserResource::form($user);
    }

    public function show(User $user): UserResource
    {
        return UserResource::show($user);
    }

    public function custom(Request $request, User $user): UserResource
    {
        return UserResource::cutsom($user);
    }
}

测试

composer test

致谢