anil / fast-api-crud
使用简单控制器的 Laravel Fast API CRUD
v2.0.4.12
2024-03-05 04:12 UTC
Requires
- illuminate/auth: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/http: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/pagination: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/routing: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
- spatie/laravel-permission: 6.*|5.*|4.*
Requires (Dev)
- laravel/pint: ^1.13
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 --service
或 php artisan make:model Post -S
将生成一个包含服务的模型。
命令 php artisan make:model Post --all
或 php artisan make:model Post -a
现在将生成一个模型、迁移、工厂、种子、策略、控制器、表单请求和服务。
合约
添加 --noContract
或 -N
选项将阻止命令实现任何合约,并且不会创建任何合约文件。
如果你永远不需要任何合约。发布配置文件,然后在配置文件中将 with_interface 值设置为 false。