kha333n / crudmodule
Laravel模型的基本CRUD模块
Requires
- php: ^8.2
- spatie/laravel-query-builder: ^6.0
Requires (Dev)
- phpunit/phpunit: ^8.5
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 = true
或withTrashed = 1
- 包含软删除的记录onlyTrashed = true
或onlyTrashed = 1
- 只显示软删除的记录 (覆盖 withTrashed)paginate = true
或paginate = 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功能
- 使用观察者 如果您需要在某些操作进行时添加、修改或更改数据,请使用模型上的观察者。例如,通过CRUD创建书籍时,您想要添加一个生成的书名缩略符。您可以使用观察者来实现。
- 使用事件 如果您需要在某些操作完成后执行一些额外任务,例如在创建书籍后发送电子邮件。您可以使用事件来实现。可用事件
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 是一名网页开发者和开源贡献者。