Пакет · mui-data-grid

Установка и требования

Пакет — библиотека без собственной конфигурации: ставится одной командой, ничего не регистрирует и никаких файлов настроек не требует. Всё, что нужно для работы, приходит вместе с зависимостями.

Требования

Требование Версия Зачем
PHP ≥ 8.4 продвигаемые свойства, new в инициализаторах, readonly
flytachi/winter-kernel ^4.0 слой запросов: гидрация и валидация запроса таблицы
flytachi/winter-ppa ^1.0 слой данных: репозитории, конструктор запросов, пагинатор
ext-pdo приходит требованием CDO, через который работает слой данных

Оба Winter-пакета объявлены в require и ставятся автоматически — отдельно требовать их не нужно.

Установка

bash
composer require flytachi/winter-mui-data-grid

Больше ничего: ни провайдеров, ни публикации конфигов, ни записей в bootstrap. Классы находятся автозагрузчиком по PSR-4 из пространства имён Flytachi\Winter\MuiDataGrid.

Что должно быть в проекте

Библиотека — надстройка, поэтому предполагает, что два слоя уже подняты.

Слой данных. Нужен настроенный репозиторий: класс конфигурации базы и репозиторий поверх таблицы. Если у вас уже есть рабочие запросы через Repository::instance(), всё готово.

php
final class ArticleRepository extends Repository
{
  protected string $dbConfigClassName = AppDb::class;
  public static string $table = 'articles';
}

Слой запросов. Запрос таблицы — обычный DTO, который гидрирует ядро. Нужно, чтобы контроллер принимал тело запроса штатной аннотацией — так же, как любой другой DTO.

Поддерживаемые базы данных

СУБД Статус Примечание
PostgreSQL полная поддержка регистронезависимый поиск через ILIKE
MySQL / MariaDB полная поддержка регистр решает коллация (*_ci — по умолчанию)
SQLite полная поддержка LIKE регистронезависим для ASCII
Прочие (Oracle и т.п.) работает регистронезависимый поиск через lower()

Разница между ними касается только четырёх операторов текстового поиска и разрешается автоматически — подробности в Режимах совпадения.

Совместимость версий

Пакет winter-kernel winter-ppa PHP
3.x ^4.0 ^1.0 ≥ 8.4
2.x ^3.0 (входил в состав ядра) ≥ 8.4

Переход с 2.x

В Winter 4 корневое пространство имён переехало (…\Winter\K2\……\Winter\Kernel\…), а слой данных выделился в отдельный пакет winter-ppa. Версии, которая работала бы одновременно с обеими раскладками, не существует — обновлять фреймворк и адаптер нужно одним шагом. Полная карта переименований и однострочник для миграции — в Обновлении до 3.0.

Проверка

Быстрее всего убедиться, что всё встало, собрав схему и построив по ней условие — база для этого не нужна:

php
use Flytachi\Winter\MuiDataGrid\Entity\MGFilterItem;
use Flytachi\Winter\MuiDataGrid\Entity\MGFilterModel;
use Flytachi\Winter\MuiDataGrid\Entity\MGOperator;
use Flytachi\Winter\MuiDataGrid\Schema\FilterType;
use Flytachi\Winter\MuiDataGrid\Schema\GridColumn;
use Flytachi\Winter\MuiDataGrid\Schema\GridSchema;
use Flytachi\Winter\MuiDataGrid\Schema\TextMatch;

$schema = GridSchema::make(
  GridColumn::for('title', 'a.title')->filterable(FilterType::String)->sortable(),
)->textMatch(TextMatch::ILike);

$where = $schema->buildWhere(new MGFilterModel([
  new MGFilterItem('title', MGOperator::CONTAINS, 'winter'),
]));

echo $where->getQuery();

Результат

sql
a.title ILIKE :iqb0

Дальше — Быстрый старт: рабочий эндпоинт от репозитория до таблицы в браузере.