kosmosafive/kosmos.filter
最新稳定版本:1.0.1
Composer 安装命令:
composer require kosmosafive/kosmos.filter
包简介
Kosmos: Фильтр
README 文档
README
Введение
Модульное решение предоставляет механизм создания полей фильтра, прием и фильтрацию данных формы, применение модификаций.
В полном виде (но не обязательно) предполагается разработка дополнительного модуля проекта *.filterconfig, который будет предоставлять возможность конфигурации фильтра и передачу данных клиенту. Например, типовой фильтр на портале может предполагать отображение видимых \ скрытых (отображаемых по кнопке "показать все") свойств фильтра, сами свойства могут быть разбиты на секции \ колонки. Шаблонизатору на основе конфигурации фильтра необходимо передавать конфигурацию свойств фильтра для рендера.
Установка
- Установить модуль
Установка через composer
В composer.json (пример для директории local) проекта добавьте
{
"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), ] ] ); }
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2024-08-20