avstriyskiy/laravel-api-controller-traits

本包最新版本(1.0.1)没有提供许可证信息。

用于简化构建项目前端API控制器的特性。

1.0.1 2023-09-29 21:19 UTC

This package is auto-updated.

Last update: 2024-09-11 13:21:37 UTC


README

本包允许您使用基于特性的基本索引、获取、创建、更新和删除方法。此外,包提供了一个抽象类,使用所有这些特性,因此您可以简单地扩展此类。您可以通过在控制器中实现方法来自定义响应、资源和集合。

基本用法

以下是一个扩展APIController类的控制器示例。它包含所有方法。您必须声明public getModelClass() 方法,它返回模型类名称。

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Avstriyskiy\LaravelApiControllerTraits\APIController;

class UserController extends APIController
{
    public function getModelClass(): string
    {
        return User::class;
    }
}

如果您不需要所有方法,您可以在控制器中使用特性,如本例所示。您仍然需要声明public getModelClass() 方法。

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Avstriyskiy\LaravelApiControllerTraits\Methods\IndexMethod;
use Avstriyskiy\LaravelApiControllerTraits\Methods\GetMethod;
use Avstriyskiy\LaravelApiControllerTraits\Methods\CreateMethod;
use Avstriyskiy\LaravelApiControllerTraits\Methods\UpdateMethod;
use Avstriyskiy\LaravelApiControllerTraits\Methods\DeleteMethod;

class UserController extends Controller
{
    use IndexMethod, GetMethod, CreateMethod, UpdateMethod, DeleteMethod;

    public function getModelClass(): string
    {
        return User::class;
    }
}

定义请求

您必须创建请求

可用方法列表

可用的自定义

如果您需要控制器额外的选项,您可以只声明方法。

getRelations()

此方法允许您在准备资源时加载模型的关系。
默认返回一个空数组。

class UserController extends APIController
{
    ...
    public function getRelations(): array
    {
        return ["phones", "comments"];
    }
}
getResource()

此方法允许您为获取、创建和更新方法中的响应定义自定义资源。
默认返回JsonResource::class

class UserController extends APIController
{
    ...
    public function getResource(): string
    {
        return UserResource::class;
    }
}
getCollection()

此方法允许您为响应定义自定义集合。
默认返回ResourceCollection::class

class UserController extends APIController
{
    ...
    public function getCollection(): string
    {
        return UserCollection::class;
    }
}
getModelNotFoundExceptionClass()

此方法允许您定义在数据库中找不到模型时使用的自定义异常类。
默认返回IlluminateModelNotFoundException::class

class UserController extends APIController
{
    ...
    public function getModelNotFoundExceptionClass(): string
    {
        return IlluminateModelNotFoundException::class;
    }
}
additionalDataFor%METHOD%()

您可以通过定义此类方法返回的额外数据数组来为您的JsonResponse添加额外数据。
默认返回一个空数组。

class UserController extends APIController
{
    ...
    public function addditionalDataForIndex(): array
    {
        return ["statusText" => "Success"];
    }

    public function additionalDataForCreate(): array
    {
        return ["statusText" => "Created"];
    }
}
resourceClassFor%METHOD%()

您还可以为单个方法定义自定义资源/集合类。
签名与IndexMethod相同以提高兼容性,但它应返回一个集合类,如示例所示。
默认情况下,这些方法返回getResource()getCollection()方法。

class UserController extends APIController
{
    ...
    public function resourceClassForIndex(): string
    {
        return UserCollection::class;
    }

    public function resourceClassForGet(): string
    {
        return UserResource::class;
    }
}
getModelNotFoundExceptionClassFor%METHOD%()

此方法允许您在数据库中找不到模型时使用不同的自定义异常类。
默认返回getModelNotFoundException()

class UserController extends APIController
{
    ...
    public function getModelNotFoundExceptionClassForGet(): string
    {
        return GetModelNotFoundException::class;
    }
    public function getModelNotFoundExceptionClassForDelete(): string
    {
        return $this->getMOdelNotFoundExceptionClass();
    }
}