Обновление до 3.0
Версия 3.0 следует за двумя изменениями во фреймворке — переименованием корневого пространства имён и выделением слоя данных в отдельный пакет — и заодно чинит то, что никогда не было портируемым: регистронезависимый поиск, зашитый под PostgreSQL.
Обновляться нужно одним шагом
Сборки, работающей одновременно с обеими раскладками пространств имён, не существует: они взаимоисключающие. Обновляйте фреймворк и адаптер вместе.
1. Поднять констрейнт
composer require flytachi/winter-mui-data-grid:^3.0Composer подтянет 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 |
Две последние строки — главная ловушка: это не переименование K2 → Kernel, эти типы
покинули ядро целиком. Поэтому в автозамене они должны идти раньше общего правила:
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) => … по-прежнему корректен. Объявляйте второй параметр только если
он вам нужен:
->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.
Что дальше
- Установка — требования и проверка.
- Режимы совпадения — что именно изменилось в SQL.
- Справочник API — актуальные сигнатуры.