kosmosafive/kosmos.filter

Kosmos: 过滤器

安装: 1

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 1

分支: 0

开放问题: 0

类型:bitrix-d7-module

1.0.1 2024-08-20 10:19 UTC

This package is auto-updated.

Last update: 2024-09-20 10:34:06 UTC


README

简介

模块化解决方案提供了创建过滤器字段、接收和过滤表单数据、应用修改的机制。

完整版本(但不是必需的)假设开发一个额外的项目模块 *.filterconfig,该模块将提供配置过滤器和向客户端传递数据的能力。例如,在门户上的典型过滤器可能包括显示或隐藏(通过“显示所有”按钮)的过滤器属性,属性可以按部分或列划分。基于过滤器配置的模板化器需要传递过滤器属性的配置以进行渲染。

安装

  • 安装模块

通过composer安装

在项目的composer.json(例如,对于本地目录)中添加

{
  "require": {
    "wikimedia/composer-merge-plugin": "dev-master"
  },
  "config": {
    "allow-plugins": {
      "wikimedia/composer-merge-plugin": true
    }
  },
  "extra": {
    "merge-plugin": {
      "require": [
        "../bitrix/composer-bx.json",
        "modules/*/composer.json"
      ],
      "recurse": true,
      "replace": true,
      "ignore-duplicates": false,
      "merge-dev": true,
      "merge-extra": false,
      "merge-extra-deep": false,
      "merge-scripts": false
    },
    "installer-paths": {
      "modules/{$name}/": [
        "type:bitrix-d7-module"
      ]
    }
  }
}

使用

使用示例

use Bitrix\Main\UserTable;
use Kosmos\Filter;
use Kosmos\Filter\ValueObject\FormData;

$query = UserTable::query();

$fieldCollection = (new Filter\Field\FieldCollection())
    ->add(
        new Filter\Field\PositiveInteger(
            new Filter\FieldConfig\Simple(
                new Filter\FieldConfig\Property\Single('ID'),
                'ID'
            )
        )
    )
    ->add(
        new Filter\Field\Boolean(
            new Filter\FieldConfig\Simple(
                new Filter\FieldConfig\Property\Single('ACTIVE'),
                'ACTIVE'
            )
        )
    )
    ->add(
        new Filter\Field\Text(
            new Filter\FieldConfig\Simple(
                new Filter\FieldConfig\Property\Single('NAME'),
                'NAME'
            )
        )
    );

$formData = new FormData(...);
$fieldCollection->setFormData($formData);
(new Filter\QueryBuilder\ORM($query))->apply($fieldCollection, $formData);

实体

Field (字段)

描述过滤器字段的实体。例如:布尔值、正整数、选择器、函数、用户。存储字段配置(FieldConfig)、字段值。负责在传递的表单数据中查找、过滤和归一化字段数据。字段可能包含额外的参数集。例如,选择日期范围的字段允许指定选择的最小和最大日期;指定是否可以选择日期或日期和时间。

FieldConfig (字段配置)

字段配置存储有关属性(Property)和字段标识符的信息。

Property (属性)

负责存储有关查询中字段(读作:字段名称或构建查询时使用的前缀)的信息。

QueryBuilder (查询构建器)

为了与特定的查询构建实现进行交互,实现一个特定的构建器。例如,可以实现:ORM构建器、Elasticsearch构建器、ClickHouse构建器。接受字段集合和表单数据。找到字段处理器并应用所需的修改。例如,ORM构建器存储查询对象,该对象在应用修改时得到丰富。

HandlerConfig (处理器配置)

存储有关字段处理器(Handler)和处理的字段类的信息。

Handler (处理器)

接受查询构建器、字段和表单数据。根据获得的数据应用必要的修改。处理器可以描述不同的逻辑。例如,等价性、部分内容、区间。

功能扩展

在自定义模块中通过实现相应接口或继承基本类创建自己的实体。

为了支持自定义字段,需要定义字段处理器。可以通过模块的事件 onCreateHandlerCollection 来完成,该事件在 handlerConfig 键中返回一个或多个配置。

use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Kosmos\Filter\Handler;
use Kosmos\Sample\Domain\Filter\Field;
use Kosmos\Sample\Domain\Filter\Handler as SampleHandler;

public static function onCreateHandlerCollection(Event $event): EventResult
{
    return new EventResult(
        EventResult::SUCCESS,
        [
            'handlerConfig' => [
                new Handler\HandlerConfig(new SampleHandler\ORM\Role(), Field\Role::class),
            ]
        ]
    );
}