aedart/athenaeum-filters

基于HTTP查询参数的搜索过滤器实用程序


README

提供了一种创建基于接收到的HTTP查询参数的搜索和约束查询过滤器的途径,适用于您的 Laravel 应用程序。

示例

您的自定义过滤器构建器

通过扩展 BaseBuilder 抽象,您可以封装一个自定义的过滤器构建器。每当匹配到HTTP查询参数时,就会调用相应的“处理器”,负责创建一个或多个查询过滤器。

namespace Acme\Filters;

use Aedart\Filters\BaseBuilder;
use Acme\Filters\Processors\MySearchProcessor;
use Acme\Filters\Processors\TextProcessor;
use Acme\Filters\Processors\DateProcessor;
use Acme\Filters\Processors\SortProcessor;

class UserFilterBuilder extends BaseBuilder
{
    public function processors(): array
    {
        // Key = http query parameter, value = parameter processor...
        return [
            'search' => MySearchProcessor::make(),
            
            'name' => TextProcessor::make(),
            
            'created_at' => DateProcessor::make(),
            
            'sort' => SortProcessor::make()
                ->force(),
            
            // ...etc
        ];
    }
}

在您的请求中

要使用您的自定义过滤器构建器,在请求中创建一个新的实例,例如在 验证后钩子 中。

namespace Acme\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Aedart\Contracts\Filters\BuiltFiltersMap;
use Acme\Filters\UserFilterBuilder;

class ListUsersRequest exends FormRequest
{
    public ?BuiltFiltersMap $filters = null;

    public function after(Validator $validator)
    {        
        // Add filters using your custom builder
        $this->filters = UserFilterBuilder::make($this)
            ->build();
    }

    // ... remaining not shown ...
}

在您的控制器中

最后,直接在您的模型上应用过滤器。

use App\Http\Controllers\Controller;
use App\Models\User;
use Acme\Requests\ListUsersRequest;

class UsersController extends Controller
{
    public function index(ListUsersRequest $request)
    {
        // Apply all requested filters...
        return User::applyFilters($request->filters->all())
            ->paginate(10);
        );
    }
}

官方文档

请阅读 官方文档 获取更多信息。

单一代码库位于 github.com/aedart/athenaeum

版本控制

此包遵循 语义版本控制 2.0.0

许可

BSD-3-Clause,请阅读本包中包含的 LICENSE 文件