mjedari/larafilter

基于 Laravel 查询字符串的简单过滤器包

1.0.2 2021-12-27 17:18 UTC

This package is auto-updated.

Last update: 2024-09-27 23:31:01 UTC


README

Laravel 查询字符串过滤器

Latest Version on Packagist Build Status Scrutinizer Code Quality Quality Score PHP Tests PHP 8 Tests Total Downloads

这里应该放你的描述。尽量限制在一段或两段话内,并提及你支持的 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)。请参阅 许可文件 了解更多信息。