kha333n / crudmodule

Laravel模型的基本CRUD模块

v1.0.0 2024-07-13 13:29 UTC

This package is auto-updated.

Last update: 2024-09-13 14:13:19 UTC


README

这是一个简单的Laravel CRUD模块。它是一个简单的模块,可用于在数据库中创建、读取、更新和删除记录。

它将帮助您以更快的速度和更高的效率实现Laravel中的基本CRUD操作。

不要浪费时间在重复的基本任务上

它具有可扩展性和可定制性,以满足您的需求

功能

  • 在数据库中创建、读取、更新和删除记录
  • 更容易实现验证和授权规则
  • 过滤和排序记录
  • 自定义记录列表
  • 使用观察器和事件扩展功能
  • 开箱即用的API支持

索引

安装

您可以通过composer安装此包

composer require kha333n/crudmodule

使用方法

在您的模型中添加Crudable特质并实现CrudableInterface。并在您的模型中实现所需的crudable方法。

use Kha333n\Crudable\Crudable;

class YourModel extends Model implements CrudableInterface
{
    use Crudable;
    
    public function crudable(): array {
        return [
            'column1',
            'column2',
            '...'
        ];
    }
}

通过API路由使用

对于大多数使用情况,您可以通过内置的API路由来使用它。它们提供了完整的CRUD操作。

可用的API路由

  • GET /{model} - 列出所有记录
  • GET /{model}/{id} - 获取单个记录
  • POST /{model} - 创建新记录
  • PUT /{model}/{id} - 更新记录
  • DELETE /{model}/{id} - 删除记录
  • DELETE /{model}/{id}/force - 强制删除记录
  • PATCH /{model}/{id} - 恢复记录

示例:使用Book模型

  • GET /api/book
  • GET /api/book/1
  • POST /api/book
  • PUT /api/book/1
  • DELETE /api/book/1
  • DELETE /api/book/1/force
  • PATCH /api/book/1

列表自定义

您可以通过在URL中传递查询参数来自定义列表记录

可用的查询参数

  • withTrashed = truewithTrashed = 1 - 包含软删除的记录
  • onlyTrashed = trueonlyTrashed = 1 - 只显示软删除的记录 (覆盖 withTrashed)
  • paginate = truepaginate = 1 - 分页记录
  • perPage = 10 - 每页记录数

示例:使用Book模型

GET /api/book?withTrashed=true&paginate=true&perPage=23

过滤和排序

您可以通过通过URL中的查询参数来过滤和排序记录。我们使用Spatie Laravel Query Builder来完成此操作,有关更多信息,请参阅Spatie指南。

示例:使用Book模型

GET /api/book?filter[title]=abc&sort=created_at

通过控制器使用

如果您想对CRUD有更大的控制或希望自定义应用程序流程,可以直接与模型仓库交互。

// Create new record
$model = Book::getRepository()->create($request->all());

// Update record
$model->repository()->update($request->all());

// Delete record
$model->repository()->delete();

// Get all records
$models = Book::getRepository()->all();
//OR
$models = $model->repository()->all();

// force delete record
$model->repository()->forceDelete();

添加验证规则

在您的模型中,您可以添加每个字段的验证规则。

如果没有提供,它将使用基于其转换的默认验证规则。

如果两者都没有定义,它将将其视为字符串。

默认规则

  • 字符串:有时|string|max:255
  • 整数:有时|integer
  • 浮点数:有时|numeric
  • 布尔值:有时|boolean
  • 日期:有时|date
// in YourModel.php add array

    public array $rules = [
        'column1' => 'required|string|min:3|max:255',
        'column2' => 'required|string',
        '...' => 'required|string',
    ];

添加授权规则

在您的模型中,您可以添加每个字段的授权规则

在您的模型中实现CrudableInterface

在您的模型中实现所有必需的方法,并在每个方法中添加您的授权逻辑。

可用方法

  • canViewAny(Model $model)
  • canView(Model $model)
  • canCreate(Model $model)
  • canUpdate(Model $model)
  • canDelete(Model $model)
  • canForceDelete(Model $model)
  • canRestore(Model $model)

如果只需要其中几个,请在使用模型时使用 CrudableAdapter 特性,然后仅添加所需的那些。默认情况下,其他所有操作都将被允许。

示例

// Only can create implemented
class Book implements \kha333n\crudmodule\Contracts\CrudableInterface {
    use \kha333n\crudmodule\Traits\CrudableAdapter;
    use \kha333n\crudmodule\Traits\Crudable;
    
    public function crudable(): array {
        return [
            'column1',
            'column2',
            '...'
        ];
    }
    
    public function canCreate(\Illuminate\Database\Eloquent\Model $model): bool {
        return auth()->user()->hasRole('Author');
    }
}

过滤和排序

对于过滤和排序,我们使用 Spatie Laravel Query Builder 包。

默认情况下,它将允许过滤和排序时使用所有可填充的列。

如果您想修改它们或添加自己的过滤规则,请实现模型中的过滤或排序方法。

// See spatie query builder package for rules
    public function filters()
    {
        return $this->getFillable();
    }

    public function sorts()
    {
        return $this->getFillable();
    }

自定义列表

默认情况下,all 函数返回模型中的所有记录。但您可以通过传入带有自定义配置的 CurdConfiguration 类来自定义它们。

可用的配置

  • withTrashed = false
  • onlyTrashed = false
  • paginate = false
  • perPage = 10

示例

YourModel::getRepository()->all(new \kha333n\crudmodule\Structures\CrudConfiguration(
    withTrashed: true,
    onlyTrashed: true, // When onlyTrashed is true, it overrides, the withTrashed and only deleted record will show
    paginate: true,
    perPage: 23
))

扩展功能

通过2个方法扩展CRUD功能

  1. 使用观察者 如果您需要在某些操作进行时添加、修改或更改数据,请使用模型上的观察者。例如,通过CRUD创建书籍时,您想要添加一个生成的书名缩略符。您可以使用观察者来实现。
  2. 使用事件 如果您需要在某些操作完成后执行一些额外任务,例如在创建书籍后发送电子邮件。您可以使用事件来实现。可用事件
    • Created
    • Updated
    • Deleted
    • ForceDeleted
    • Restored

示例:在 Book 模型中,在 EventsServiceProvider 中注册事件监听器,如下所示

    protected $listen = [
        'BookCreated' => [
            BookCreatedListener::class,
        ],
        'BookUpdated' => [
            BookUpdatedListener::class,
        ],
        'BookDeleted' => [
            BookDeletedListener::class,
        ],
        'BookForceDeleted' => [
            BookForceDeletedListener::class,
        ],
        'BookRestored' => [
            BookRestoredListener::class,
        ],
    ];
// BookCreatedListener.php
class BookCreatedListener
{
    public function handle(object $event)
    {
        // $event will contain the model instance on which operation performed
        // Perform your task here
    }
}

许可证

MIT 许可证。请参阅 许可证文件 了解更多信息。

贡献

有关详细信息,请参阅 CONTRIBUTING.md

关于kha333n

kha333n 是一名网页开发者和开源贡献者。