xanderevg/grid_filters
Composer 安装命令:
composer require xanderevg/grid_filters
包简介
Grid filtering library for Laravel & Symfony. Dynamically apply user-defined filters (text, number, date, ranges) rules to Eloquent/Doctrine queries with unified API. Supports multi-field filters and complex UI-driven data grids.
关键字:
README 文档
README
Описание
Библиотека предоставляет инструменты для динамического добавления условий фильтрации (WHERE) к запросам Laravel Eloquent Builder и Doctrine QueryBuilder на основе параметров, переданных с клиента (например, из UI таблицы).
Библиотека сократит время на реализацию фильтрации таблиц, унифицирует код для Laravel/Symfony и позволит легко масштабировать логику запросов.
Решение идеально подходит для:
- Админ-панелей с гридами.
- Приложений с табличными данными, требующими гибкой фильтрации.
Ключевые возможности
- Поддержка Laravel (Eloquent) и Symfony (Doctrine ORM) из коробки.
- Единый API для обеих платформ.
- Объединение фильтров с помощью логического оператора AND
- Фильтрация по любым полям модели/сущности.
- Несколько фильтров на одно поле.
- Комбинирование фильтров для разных полей.
- Поддержка кэша (Xanderevg\GridFiltersLibrary\Core\Cache\CacheAdapterInterface)
Поддержка типов: текст, число, дата, булево, диапазон, список и др.
Сортировка
- Мультиколоночная сортировка.
- Настраиваемые направления (ASC/DESC).
Пример использования
- Создание фабрики
$baseFactory = new FilterFactory(); // Бибилиотечные фильтры$baseFactory = new FilterFactory('App\BaseFilters'); // BaseFilters$customFactory = (new FilterFactory())->addNamespace('App\CustomFilters'); //Библиотечные + CustomFilters, приоритет у библиотечных$customFactory = (new FilterFactory('App\BaseFilters'))->addNamespace('App\CustomFilters'); //BaseFilters + CustomFilters, приоритет у BaseFilters
- Интеграция с DI-контейнерами Laravel:
// В ServiceProvider
$this->app->singleton(FilterFactory::class, function() {
return (new FilterFactory(config('filters.base_namespace')))->addNamespace(config('filters.custom_namespace'));
});
- Добавление фильтров
use FilterLibrary\Laravel\Query\EloquentBuilderAdapter;
use FilterLibrary\Symfony\Query\DoctrineQueryBuilderAdapter;
use FilterLibrary\Core\FilterFactory;
// Инициализация фабрики
$adapterLaravel = new EloquentBuilderAdapter($eloquentBuilder);
$adapterSymfony = new DoctrineQueryBuilderAdapter($doctrineQueryBuilder);
$factory = new FilterFactory('Xanderevg\GridFilters\Filters');
$factory->addNamespace('App\CustomFilters');
// Использование
$filterElements = [
new FilterElement('column_1', 'value1', 'eq', 'string'),
new FilterElement('column_2', 'value2', 'eq', 'string'),
];
try {
foreach ($filterElements as $filterElement) {
$filter = FilterFactory->create($adapterLaravel, $filterElement);
$adapterLaravel = $filter->add();
}
} catch (FilterNotFoundException $e) {
// Обработка ошибки
}
$builder = $adapterLaravel->getBuilder();
$builder->get();
- FilterFacade приблизительно
class FilterFacade
{
private static ?FilterFactory $instance = null;
public static function addNamespace(string $namespace): void
{
self::getInstance()->addNamespace($namespace);
}
public static function create(string $type, ...$args): object
{
return self::getInstance()->create($type, ...$args);
}
private static function getInstance(): FilterFactory
{
if (!self::$instance) {
self::$instance = new FilterFactory(
'Xanderevg\GridFilters\Filters'
);
}
return self::$instance;
}
}
Поддерживаемые фильтры (из коробки)
- BooleanFilter
- BoolFilter
- DateFilter
- DatetimeFilter
- EditorFilter
- IdFilter
- IntFilter
- NumberFilter
- RolesFilter
- SelectFilter
- SelectTreeFilter
- StringFilter
- StringSelectFilter
- TextFilter
Установка
composer require xanderevg/grid_filters
Кастомизация
Адаптер для кэша
$redis = new Predis\Client();
$cacheAdapter = new App\Cache\RedisCacheAdapter($redis);
$filterFactory = new Xanderevg\GridFiltersLibrary\Core\FilterFactory(
'Xanderevg\GridFiltersLibrary\Core\Filters',
$cacheAdapter
);
Лицензия
MIT License.
GitHub: https://github.com/xanderevg/grid_filters
TODO
Тесты, включая тесты на реальной бд
xanderevg/grid_filters 适用场景与选型建议
xanderevg/grid_filters 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 666 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 03 月 20 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「symfony」 「doctrine」 「query builder」 「laravel」 「eloquent」 「data grids」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 xanderevg/grid_filters 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 xanderevg/grid_filters 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 xanderevg/grid_filters 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
The bundle for easy using json-rpc api on your project
Query filtering in your frontend
Anax Database Active Record module for model classes.
Make pimcore migration simple
Database/ORM-agnostic query construction helper
Bundle Symfony DaplosBundle
统计信息
- 总下载量: 666
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 22
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-03-20