ferfabricio / rest-get-filters
使用 Eloquent scopes 的 Laravel 应用程序的过滤器
1.0.2
2022-09-06 20:29 UTC
Requires
- php: ^7.2.5|^8.0
- laravel/framework: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mockery/mockery: ^1.4
- phpunit/phpunit: ^8.5
README
rest-get-filters
用于 Laravel 项目的 GET 请求的过滤器
动机
在 GET 请求中创建过滤器有几种方法,包括对这一主题的另一种方法,但其中许多方法都需要开发者为简单的事情做大量工作。
此包的主要目标是做些简单且效果良好的事情。
安装
composer require ferfabricio/rest-get-filters
用法
设置此包的步骤
- 添加 Filterable 特性;
- 定义过滤器;
- 在查询中应用过滤器;
添加 Filterable 特性
例如模型
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Example extends Model { protected $fillable = [ 'name' ]; }
添加特性 FerFabricio\RestGetFilters\FilterFactory\Filterable。
<?php namespace App; use FerFabricio\RestGetFilters\FilterFactory\Filterable; use Illuminate\Database\Eloquent\Model; class Example extends Model { use Filterable; protected $fillable = [ 'name' ]; }
定义过滤器
您可以通过添加受保护的参数 $filters 作为数组来定义过滤器,其中 keys 是列名,而 value 是要应用的过滤器的类型。
每个过滤器都有一个名为 IDENTIFIER 的常量,需要在 $filters 定义中使用。
<?php namespace App; use FerFabricio\RestGetFilters\Traits\Filterable; use FerFabricio\RestGetFilters\Filters\Date as DateFilter; use FerFabricio\RestGetFilters\Filters\Like as LikeFilter; use Illuminate\Database\Eloquent\Model; class Example extends Model { use Filterable; protected $fillable = [ 'name' ]; protected $filters = [ 'created_at' => DateFilter::IDENTIFIER, 'name' => LikeFilter::IDENTIFIER ]; }
在查询中应用过滤器
Filterable 特性向模型添加了一个作用域,它将配置在 $filters 变量上的所有过滤器应用,要应用此作用域,您需要调用 filters 方法;
<?php namespace App\Http\Controllers; use App\Example; use App\Http\Controllers\Controller; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class ExampleController extends Controller { /** * List all Examples with filters * * @param Request $request * @return JsonResponse */ public function index(Request $request) : JsonResponse { // You need validate the input values $filters = $request->get('filters', []); $examples = Example::filters($filters)->get(); return response()->json($examples); } }