supaapps / supaapps-laravel-api-kit
Supaapps Laravel项目的模板和辅助工具
Requires
- php: ^8.1 || ^8.3
- illuminate/console: ^10.0 || ^11.0
- illuminate/database: ^10.0 || ^11.0
- illuminate/http: ^10.0 || ^11.0
- illuminate/support: ^10.0 || ^11.0
- jfcherng/php-diff: ^6.15
- symfony/var-exporter: ^6.3
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.3
- squizlabs/php_codesniffer: ^3.7
- dev-main
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.0
- v0.1.0-alpha.19
- v0.1.0-alpha.18
- v0.1.0-alpha.17
- v0.1.0-alpha.16
- v0.1.0-alpha.15
- v0.1.0-alpha.14
- v0.1.0-alpha.13
- v0.1.0-alpha.12
- v0.1.0-alpha.11
- v0.1.0-alpha.10
- v0.1.0-alpha.9
- v0.1.0-alpha.8
- v0.1.0-alpha.7
- v0.1.0-alpha.6
- v0.1.0-alpha.5
- v0.1.0-alpha.4
- v0.1.0-alpha.3
- v0.1.0-alpha.2
- v0.1.0-alpha.01
- dev-SLARA-21_replace-laravel-framework-package-with-the-required-packages-in-dependencies
- dev-feature/SLARA-15_publish_docker_and_example_env
- dev-feature/SLARA-12_add-test-cases-for-audit
- dev-feature/SLARA-18_log-to-stderr-instead-of-single-files
- dev-feature/SLARA-14_create_stubs_for_crud_controller
- dev-feature/SLARA-17_add_remaining_test_cases_for_crud_controller
- dev-feature/SLARA-11_add_test_cases_for_crud
- dev-feature/SLARA-16_update_supalara_namespace
- dev-feature/SLARA-9_document_usage_in_readme
- dev-feature/SLARA-10_init-test-code
- dev-feature/SLARA-8_support_different_search_operations
- dev-bugfix/SLARA-7_can-t-delete-models
- dev-feature/SLARA-6_default_order_is_created_at_desc
- dev-feature/SLARA-5_allow_sorting_by_columns
- dev-SirNarsh-patch-1
- dev-feature/SLARA-4_multiple_search_by_array_and_filters
- dev-bugfix/SLARA-3_remove_import_statement_for_response_and_abort
- dev-feature/SLARA-2_detect_logged_in_user
This package is auto-updated.
Last update: 2024-09-08 12:34:17 UTC
README
Supaapps Laravel项目的模板和辅助工具
目录
安装
composer require supaapps/supaapps-laravel-api-kit
使用方法
生成CRUD控制器
要创建CRUD控制器,运行以下命令
php artisan make:crud-controller
CRUD
要利用CRUD模板控制器的好处,在你的控制器中扩展BaseCrudController
。 示例
use Supaapps\LaravelApiKit\Controllers\BaseCrudController; class ExampleController extends BaseCrudController { public string $model = \App\Models\Example::class; // replace with your model }
可用的CRUD属性
在你的CRUD控制器中可以使用多个属性
- CRUD操作的模式。 (必需)
public string $model = \App\Models\Example::class; // replace with your model
CrudIndexTrait
使用的属性
- 是否分页索引响应的响应。
public bool $shouldPaginate = false;
- 使用请求中的
search
参数在单个列上执行搜索。 如果您想搜索多个列,请使用$searchSimilarFields
,见下一个属性。
public ?string $searchField = null; // replace with desired column
所有即将到来的属性都应该是数组。如果您想在
CRUD控制器覆盖
中添加一些逻辑,请参阅CRUD控制器覆盖
- 使用请求中的
search
参数和LIKE
操作符在指定的列中查找相似结果。
public array $searchSimilarFields = [];
在以下示例中,它在name
或description
中查找%supa%
// user hit endpoint > /example?search=supa public array $searchSimilarFields = [ 'name', 'description', ];
- 使用请求中的
search
参数和=
操作符在指定的列中查找精确结果。
public array $searchExactFields = [];
在以下示例中,它在id
、price
或category_id
中查找1
// user hit endpoint > /example?search=1 public array $searchExactFields = [ 'id', 'price', 'category_id', ];
- 使用MySQL的
DATE()
函数将请求中的search
参数包裹起来在指定的列中查找结果。
public array $searchDateFields = [];
在以下示例中,它在completed_at
、created_at
或updated_at
中查找2023-09-26
// user hit endpoint > /example?search=2023-09-26 public array $searchDateFields = [ 'completed_at', 'created_at', 'updated_at', ];
- 通过精确的给定值过滤列。确保输入的列是复数形式。
public array $filters = [];
在以下示例中,它将应用查询WHERE id IN (1, 2) AND code IN ('ABC')
// user hit endpoint > /example?ids[]=1&ids[]=2&codes[]=ABC public array $filters = [ 'ids', 'codes', ];
- 通过最小和最大值过滤日期列
public array $dateFilters = [];
在以下示例中,它将搜索具有created_at
大于create_at_min
和小于created_at_max
的记录,并且updated_at
大于updated_at_min
// user hit endpoint > /example?created_at_min=2023-09-01&created_at_max=2023-09-30&updated_at_min=2023-09-15 public array $dateFilters = [ 'created_at', 'updated_at', ];
- 过滤
NULL
或NOT NULL
的列
public ?array $isEmptyFilters = [];
在以下示例中,用户想要获取已完成且未取消的奖励。这些奖励具有completed_at IS NOT NULL
和cancelled_at IS NULL
// user hit endpoint > /example?is_empty[completed_at]=false&is_empty[cancelled_at]=true public ?array $isEmptyFilters = [ 'completed_at', 'cancelled_at', ];
- 定义默认的排序列
public ?array $defaultOrderByColumns = null;
在以下示例中,控制器中定义了2个排序规则。结果将按created_at
降序和按id
升序排序。
public ?array $defaultOrderByColumns = [ 'created_at,desc', 'id,asc' ];
但如果请求有sort
查询参数,则它将覆盖defaultOrderByColumns
。 示例
/sort?sort[id]=desc&sort[name]=asc
这将首先按id
降序排序,然后按name
升序排序
UpdateIndexTrait
使用的属性
- 禁用模型的更新。
public bool $readOnly = false;
DeleteIndexTrait
使用的属性
- 启用模型的删除。
public bool $isDeletable = false;
CRUD控制器覆盖
如果您想为属性添加更多逻辑,您可以使用getter在控制器中覆盖属性。例如:根据条件返回不同的 $searchExactFields
private function getSearchExactFields(): array { if (request('user_type') == 'admin') { return [ 'admin_id' ]; } return [ 'user_id' ]; }
在CrudIndexTrait
中覆盖方法
- 覆盖
$searchSimilarFields
private function getSearchSimilarFields(): array;
- 覆盖
$searchExactFields
private function getSearchExactFields(): array;
- 覆盖
$searchDateFields
private function getSearchDateFields(): array;
- 覆盖
$filters
private function getFilters(): array;
- 覆盖
$dateFilters
private function getDateFilters(): array;
- 覆盖
$isEmptyFilters
private function getIsEmptyFilters(): array;
- 获取可以按顺序排列的允许列表
// by default, it merges the values from: // $this->getSearchSimilarFields(), // $this->getSearchExactFields(), // $this->getSearchDateFields() private function getOrderByColumns(): array;
- 覆盖
$defaultOrderByColumns
private function getDefaultOrderByColumns(): ?array;
用户签名
您可以通过3个步骤跟踪您模型中的created
和updated
用户
- 将所需的列包含到您的模型
schema
中
Schema::table('articles', function (Blueprint $table) { $table->auditIds(); });
auditIds
接受2个参数
table
:相关表名,默认:users
column
:相关表上的相关列名,默认:id
- 将自定义列包含到您的模型
$fillable
属性中
protected $fillable = [ 'created_by_id', 'updated_by_id', ... ]
- 为您的模型添加观察者
// in src/Providers/EventServiceProvider.php add the following line protected $observers = [ \App\Models\Article::class => [ // replace Article with your model \Supaapps\LaravelApiKit\Observers\UserSignatureObserver::class, ], ... ];
测试
composer test
代码风格检查
composer lint