mjedari / larafilter
基于 Laravel 查询字符串的简单过滤器包
Requires
- php: ^7.4|^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.1
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-27 23:31:01 UTC
README
Laravel 查询字符串过滤器
这里应该放你的描述。尽量限制在一段或两段话内,并提及你支持的 PSRs,以避免用户和贡献者的混淆。
快速开始
创建过滤器
php artisan make:filter country
实现你的过滤器逻辑
在创建的过滤器类中,在 apply()
方法中实现你的逻辑。为了获取查询值,只需使用 $this->value
。我们已为您从请求中检索它。
... public function apply(Builder $builder) { return $builder->where('country', $this->value); } ...
为模型注册过滤器类
在注册之前,你应该在你的模型中使用 Filterable
特性。
use Filterable; ... ... protected static $filters = [ Country::class, ];
使用它!
// All registered filtered are available through this method: User::filter()->get(); // Only Specific registered filter is available and executable: User::filterThrough([Country::class])->get();
安装
您可以通过 composer 安装此包
composer require mjedari/larafilter
然后你可以发布配置文件
php artisan vendor:publish --provider "Mjedari\Larafilter\LarafilterServiceProvider"
用法
初始化
很简单。首先通过这个命令创建一个过滤器
php artisan make:filter filter-name"
命令将在默认目录 App\Filters
下创建一个类
namespace App\Filters; use Illuminate\Database\Eloquent\Builder; use Mjedari\Larafilter\Filters\FilterContract; class Active extends FilterContract { public function apply(Builder $builder) { // TODO: Implement apply() method. } public function options() { // TODO: Implement options() method. } /* * Set rules on the query string */ public function rules() { return [ // ]; } }
你的过滤器逻辑将在 apply()
方法中实现
public function apply(Builder $builder) { return $builder->where('avtive', $this->value); }
重要的是,你可以在过滤器类中使用 $this->value
访问查询字符串值。
使用
对于你想要过滤的模型,你应该在其中添加 Filterable
特性。
class User extends Authenticatable { use Filterable; . . .
然后添加你创建的相关过滤器。它应该是静态属性
use App\Filters\Active; use App\Filters\City; class User extends Authenticatable { use Filterable; protected static $filters = [ Active::class, City::class ]; . . .
一切准备就绪。只需在查询中使用它
User::filter()->get();
如果你想要指定某些过滤器,可以通过这个方法传递它们
User::filterThrough([City::class])->get();
需要注意的是,这个包与查询字符串一起工作。例如
Route::get('/?country=germany', function() { return User->filter()->get(); });
因此,你应该通过 URL 传递参数。默认查询名称是过滤器类的名称。当然,你可以通过以下方式更改过滤器查询名称
class CountryFilter extends FilterContract { public static $queryName = 'country'; . . .
此外,你还可以对你的查询字符串参数设置规则
class Active extends FilterContract { public function rules() { return [ 'required', Rule::in(['true', 'false']), ]; }
此外,有时我们可能希望转换查询字符串值。所以
class Active extends FilterContract { protected $cast = 'boolean'; public function rules() { return [ // ]; }
测试
composer test
更新日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全
如果你发现任何安全相关的问题,请通过电子邮件 i.jedari@gmail.com 而不是使用问题跟踪器。
致谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。