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。