anil/fast-api-crud

使用简单控制器的 Laravel Fast API CRUD

v2.0.4.12 2024-03-05 04:12 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: 获取所有记录时应用的 Scopes 数组。
  • $scopeWithValue: 获取所有记录时应用的带有值的 Scopes 数组。
  • $loadScopes: 获取单个记录时应用的 Scopes 数组。
  • $loadScopeWithValue: 获取单个记录时应用的带有值的 Scopes 数组。
  • $withAll: 获取所有记录时预加载的关系数组。
  • $withCount: 获取所有记录时计数的关联数组。
  • $withAggregate: 获取所有记录时应用的聚合函数数组。
  • $loadAll: 获取单个记录时预加载的关系数组。
  • $loadCount: 获取单个记录时计数的关联数组。
  • $loadAggregate: 获取单个记录时应用的聚合函数数组。
  • $isApi: 一个布尔值,表示控制器是否作为 API 使用。
  • $forceDelete: 一个布尔值,表示执行软删除还是硬删除。
  • $applyPermission: 一个布尔值,表示是否应用权限。
  • $deleteScopes: 删除记录时应用的 Scopes 数组。
  • $deleteScopeWithValue: 删除记录时应用的带有值的 Scopes 数组。
  • $changeStatusScopes: 改变记录状态时应用的 Scopes 数组。
  • $changeStatusScopeWithValue: 改变记录状态时应用的带有值的 Scopes 数组。
  • $restoreScopes: 恢复记录时应用的 Scopes 数组。
  • $restoreScopeWithValue: 恢复记录时应用的带有值的 Scopes 数组。
  • $updateScopes: 更新记录时应用的 Scopes 数组。
  • $updateScopeWithValue: 更新记录时应用的带有值的 Scopes 数组。

该类有多个与基本 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 将生成一个名为 CreateUserService.php 的服务文件,位于 app/Services/CreateUser

它还将生成一个名为 CreateUserContract.php 的接口(合约),位于 app/Services/Contracts

为模型创建服务

现在在创建模型时可以添加 --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。