avstriyskiy / laravel-api-controller-traits
本包最新版本(1.0.1)没有提供许可证信息。
用于简化构建项目前端API控制器的特性。
1.0.1
2023-09-29 21:19 UTC
Requires
- php: ^7.0 | ^8.0
- laravel/framework: ^8.0 | ^9.0 | ^10.0
- laravel/helpers: ^1.4
- spatie/laravel-query-builder: ^4.0
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()
- getResource()
- getCollection()
- getModelNotFoundExceptionClass()
- additionalDataForMethod()
- resourceClassForMethod()
- getModelNotFoundExceptionClassForMethod()
可用的自定义
如果您需要控制器额外的选项,您可以只声明方法。
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(); } }