huang-yi / laravel-filter
Laravel 查询过滤器
1.0.0
2018-07-24 04:07 UTC
Requires
- illuminate/config: ~5.5
- illuminate/console: ~5.5
- illuminate/database: ~5.5
- illuminate/filesystem: ~5.5
- illuminate/http: ~5.5
- illuminate/log: ~5.5
- illuminate/support: ~5.5
- illuminate/validation: ~5.5
Requires (Dev)
- mockery/mockery: ~1.1
- phpunit/phpunit: ~7.2
This package is auto-updated.
Last update: 2024-09-12 21:31:24 UTC
README
此包帮助开发者构建查询过滤器。
翻译
安装
可以通过 composer 安装此包。
composer require huang-yi/laravel-filter
注册服务提供者(可选)
如果你的 Laravel 版本小于 5.5,你需要手动注册服务提供者。
<?php // File: config/app.php return [ 'providers' => [ HuangYi\Filter\FilterServiceProvider::class, ], ];
配置(可选)
运行此命令以发布配置文件
$ php artisan vendor:publish --provider="HuangYi\Filter\FilterServiceProvider"
key
:从查询字符串中获取过滤规则的关键字。
log_level
:日志级别。
parser
:过滤规则解析器。
生成过滤器
要创建新的过滤器,请使用 make:filter Artisan 命令。此命令将在 app/Filters
目录中创建一个新的过滤器类,并在 app/filters.php
文件中命名过滤器。
php artisan make:filter user.gender
<?php // File: app/Filters/User/Gender.php namespace App\Filters\User; use HuangYi\Filter\Contracts\FilterContract; use Illuminate\Database\Eloquent\Builder; class Gender implements FilterContract { /** * Apply filter to eloquent builder. * * @param \Illuminate\Database\Eloquent\Builder $query * @param mixed $value * @return void */ public function apply(Builder $query, $value) { $query->where('gender', $value); } }
<?php // File: app/filters.php use HuangYi\Filter\Facades\Filter; Filter::name('user.gender', App\Filters\User\Gender::class);
使用过滤器
此包提供了一个 trait HuangYi\Filter\HasFilter
。
<?php namespace App\Http\Controllers; use App\User; use HuangYi\Filter\HasFilter; class UserController extends Controller { use HasFilter; /** * User list. * * @return \Illuminate\Database\Eloquent\Builder */ public function index() { $query = User::query(); $this->applyFilters($query); $users = $query->get(); return $users; } }
客户端查询
我们应该将期望的过滤器 JSON 表示编码为 Base 64,并将其放入 filters
查询字符串变量中。
let Base64 = require('js-base64').Base64; let axios = require('axios'); let filters = JSON.stringify([ { name: "user.gender", value: "female" }, { name: "user.cities", value: [1, 2, 3] } ]); filters = Base64.encode(filters); axios.get('/users', { filters: filters }).then((response) => { console.log(response); });
许可证
Laravel Filter 依据 MIT 许可证 (MIT) 许可。