prolaxu / fast-api-crud
Laravel Fast API CRUD 轻量级控制器
v2.4
2023-07-20 06:18 UTC
Requires
- illuminate/auth: 10.*|9.*|8.*|7.*|6.*|5.*
- illuminate/http: 10.*|9.*|8.*|7.*|6.*|5.*
- illuminate/pagination: 10.*|9.*|8.*|7.*|6.*|5.*|4.*
- illuminate/routing: 10.*|9.*|8.*|7.*|6.*|5.*
- illuminate/support: 10.*|9.*|8.*|7.*|6.*|5.*
- spatie/laravel-permission: 6.x-dev|5.*|4.*|3.*|2.*|1.*
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 --service
或 php artisan make:model Post -S
将生成一个包含服务的模型。
命令 php artisan make:model Post --all
或 php artisan make:model Post -a
现在将生成模型、迁移、工厂、种子、策略、控制器、表单请求和服务。
契约
添加 --noContract
或 -N
选项将阻止命令实现任何契约,并且不会创建任何契约文件。
如果您永远不需要任何契约。发布配置文件,然后在配置文件中将 with_interface 值设置为 false。