supaapps / supalara
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:32 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', ];
- 使用
DATE()
MySQL 函数将请求中的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