prolaxu/fast-api-crud

Laravel Fast API CRUD 轻量级控制器

v2.4 2023-07-20 06:18 UTC

This package is auto-updated.

Last update: 2024-10-01 00:20:38 UTC


README

为特定模型提供基本到高级的 CRUD(创建、读取、更新、删除)功能。

Composer

安装

composer require anil/fast-api-crud

子构造方法

  • $model: 此控制器负责的模型名称。
  • $storeRequest: 存储数据时使用的请求类名称。
  • $updateRequest: 更新数据时使用的请求类名称。
  • $resource: 返回数据时使用的资源类名称。

此包对 Laravel 6 及更高版本进行了自动发现,对于更低版本,您可以在 providers 数组中添加以下内容


    'providers' => [
        ...
        \Anil\FastApiCrud\Providers\ApiCrudServiceProvider::class
    ]

此包基于 Spatie 角色和权限注册构建,在 Kernel.php 中注册,如果您还想应用权限


// Laravel 9 uses $routeMiddleware = [
//protected $routeMiddleware = [
// Laravel 10+ uses $middlewareAliases = [
protected $middlewareAliases = [
// ...
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];

示例

<?php

namespace App\Http\Controllers;

use Anil\FastApiCrud\Controller\CrudBaseController;
use App\Http\Requests\StorePostRequest;
use App\Http\Requests\UpdatePostRequest;
use App\Http\Resources\Post\PostResource;
use App\Models\Post;

class PostControllerCrud extends CrudBaseController
{
    public function __construct()
    {
        parent::__construct(
            model: Post::class,
            storeRequest: StorePostRequest::class,
            updateRequest: UpdatePostRequest::class,
            resource: PostResource::class
        );
    }
}

类有几个受保护的属性,可以在子类中重写

  • $scopes: 当获取所有记录时应用的作用域数组。
  • $scopeWithValue: 当获取所有记录时应用的作用域值数组。
  • $loadScopes: 当获取单个记录时应用的作用域数组。
  • $loadScopeWithValue: 当获取单个记录时应用的作用域值数组。
  • $withAll: 当获取所有记录时需要预加载的关系数组。
  • $withCount: 当获取所有记录时需要计数的关系的数组。
  • $withAggregate: 当获取所有记录时应用聚合函数的数组。
  • $loadAll: 当获取单个记录时需要预加载的关系数组。
  • $loadCount: 当获取单个记录时需要计数的关系的数组。
  • $loadAggregate: 当获取单个记录时应用聚合函数的数组。
  • $isApi: 一个布尔值,指示控制器是否作为 API 使用。
  • $forceDelete: 一个布尔值,指示是否执行软删除或硬删除。
  • $applyPermission: 一个布尔值,指示是否应用权限。
  • $deleteScopes: 当删除记录时应用的作用域数组。
  • $deleteScopeWithValue: 当删除记录时应用的作用域值数组。
  • $changeStatusScopes: 当更改记录状态时应用的作用域数组。
  • $changeStatusScopeWithValue: 当更改记录状态时应用的作用域值数组。
  • $restoreScopes: 当恢复记录时应用的作用域数组。
  • $restoreScopeWithValue: 当恢复记录时应用的作用域值数组。
  • $updateScopes: 当更新记录时应用的作用域数组。
  • $updateScopeWithValue: 当更新记录时应用的作用域值数组。

类有几个与基本 CRUD 操作对应的方法

  • index() - 返回所有记录的集合。
  • store() - 创建新的记录。
  • show($id) - 返回单个记录。
  • destroy($id) 删除记录。
  • delete() - 批量删除记录。
  • changeStatusOtherColumn($id,$column) - 从子类提供,在 0 和 1 之间更改特定的 $column
  • update($id) - 更新记录。
  • changeStatus($id) - 在 0 和 1 之间更改记录的状态列值。
  • restoreTrashed($id) - 恢复软删除的记录。
  • restoreAllTrashed() - 恢复所有软删除的记录。
  • forceDeleteTrashed($id) - 强制删除软删除的记录。

还有两个辅助方法,error()success(),它们返回包含消息和数据的JSON响应。这些方法用于在控制器中标准化错误和成功响应。

例如

//you 
Route::controller(PostController::class)->prefix('posts')->group(function () {
    Route::get('', 'index');
    Route::post('', 'store');
    Route::post('delete', 'delete');
    Route::post('restore-all-trashed', 'restoreAllTrashed');
    Route::delete('force-delete-trashed/{id}', 'forceDeleteTrashed');
    Route::get('{id}', 'show');
    Route::put('{id}', 'update');
    Route::put('{id}/status-change/{column}', 'changeStatusOtherColumn'); //specific columns change value from 0 to 1 and vice versa
    Route::put('{id}/status-change', 'changeStatus');//default status column from 0 to 1 and vice versa
    Route::put('{id}/restore-trash', 'restoreTrashed');

    Route::delete('{id}', 'destroy');
});
    

这个包还支持生成服务、操作、特质文件。

安装后,将可用命令 php artisan make:service {name} {--N|noContract}

创建服务文件

例如,命令 php artisan make:service createUser 将在 app/Services/CreateUser 目录中生成一个名为 CreateUserService.php 的服务文件。

它还会生成一个位于 app/Services/Contracts 目录的接口(契约)文件,名为 CreateUserContract.php

为模型创建服务

现在在创建模型时,可以使用 --service-S 选项。

例如,命令 php artisan make:model Post --servicephp artisan make:model Post -S 将生成一个包含服务的模型。

命令 php artisan make:model Post --allphp artisan make:model Post -a 现在将生成模型、迁移、工厂、种子、策略、控制器、表单请求和服务。

契约

添加 --noContract-N 选项将阻止命令实现任何契约,并且不会创建任何契约文件。

如果您永远不需要任何契约。发布配置文件,然后在配置文件中将 with_interface 值设置为 false。