Пакет · mui-data-grid

Обновление до 3.0

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

Обновляться нужно одним шагом

Сборки, работающей одновременно с обеими раскладками пространств имён, не существует: они взаимоисключающие. Обновляйте фреймворк и адаптер вместе.

1. Поднять констрейнт

bash
composer require flytachi/winter-mui-data-grid:^3.0

Composer подтянет flytachi/winter-kernel ^4.0 и flytachi/winter-ppa ^1.0. Если в вашем composer.json ядро закреплено как ^3.0, поднимите и его — иначе резолвер откажется ставить.

2. Переписать импорты

Переехали только типы фреймворка. Всё, что лежит в Flytachi\Winter\MuiDataGrid\, и Flytachi\Winter\Cdo\Qb остались на месте.

2.x 3.0 Теперь живёт в
…\K2\Http\Request\Validation\{ListOf, Valid, In, Min, Max, Positive, …} Flytachi\Winter\Kernel\Http\Request\Validation\… winter-kernel
…\K2\Http\Request\Annotation\RequestJson Flytachi\Winter\Kernel\Http\Request\Annotation\RequestJson winter-kernel
…\K2\Http\Request\RequestException Flytachi\Winter\Kernel\Http\Request\RequestException winter-kernel
…\K2\Http\Response\ResponseEntity Flytachi\Winter\Kernel\Http\Response\ResponseEntity winter-kernel
…\K2\Route\Annotation\{RequestMapping, PostMapping, …} Flytachi\Winter\Kernel\Route\Annotation\… winter-kernel
…\K2\Ppa\Entity\RepositoryViewInterface Flytachi\Winter\Ppa\Entity\RepositoryViewInterface winter-ppa
…\K2\Unit\Pagination\Paginator Flytachi\Winter\Ppa\Pagination\Paginator winter-ppa

Две последние строки — главная ловушка: это не переименование K2Kernel, эти типы покинули ядро целиком. Поэтому в автозамене они должны идти раньше общего правила:

bash
grep -rl 'Winter\\K2' src | xargs perl -pi -e '
s{Flytachi\\Winter\\K2\\Ppa\\Entity}{Flytachi\\Winter\\Ppa\\Entity}g;
s{Flytachi\\Winter\\K2\\Unit\\Pagination}{Flytachi\\Winter\\Ppa\\Pagination}g;
s{Flytachi\\Winter\\K2}{Flytachi\\Winter\\Kernel}g;
'

3. Изменились три сигнатуры

Затрагивает только тех, кто вызывает низкоуровневые части напрямую. Текучий интерфейс — GridColumn::for(), GridSchema::make(), MuiGrid::wrap() — не изменился.

2.x 3.0
MGOperator::toQb($column, $value) MGOperator::toQb($column, $value, TextMatch $mode)
GridColumn::resolveFilter($item) GridColumn::resolveFilter($item, TextMatch $mode)
GridSchema::buildWhere($model) GridSchema::buildWhere($model, ?TextMatch $mode = null)

Резолверы filterUsing() продолжают работать как написаны. Разрешённый режим передаётся вторым аргументом, а лишние аргументы PHP для пользовательских callable игнорирует — значит, fn (MGFilterItem $i) => … по-прежнему корректен. Объявляйте второй параметр только если он вам нужен:

php
->filterUsing(fn (MGFilterItem $i, TextMatch $m): ?Qb => /* … */)

4. contains больше не только для PostgreSQL

Версия 2.x писала ILIKE для contains, notContains, startsWith и endsWith безусловно. На MySQL и SQLite это синтаксическая ошибка, то есть эти четыре оператора там не работали вовсе.

Версия 3.0 определяет написание по драйверу репозитория — режим TextMatch::Auto по умолчанию: ILIKE на PostgreSQL, LIKE на MySQL и SQLite, lower(col) LIKE lower(:v) на остальных.

  • Проекты на PostgreSQL — ничего не меняется, SQL остаётся прежним.
  • Проекты на MySQL и SQLite — гриды, которые раньше были невозможны, начинают работать. Если у вас был обходной путь через filterUsing(), переписывавший LIKE вручную, его можно удалить: явный резолвер по-прежнему имеет приоритет, так что оставить его тоже безопасно.
  • Прочие СУБД (Oracle, свой DbConfig) — вы получаете портируемый Lower. Другое поведение задаётся через ->textMatch(...).

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

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

Формат запроса и ответа не изменился побайтово: фронтенд трогать не нужно, эндпоинт, написанный для 2.x, отличается только строками use.

Что дальше