Установка и требования
Пакет — библиотека без собственной конфигурации: ставится одной командой, ничего не регистрирует и никаких файлов настроек не требует. Всё, что нужно для работы, приходит вместе с зависимостями.
Требования
| Требование | Версия | Зачем |
|---|---|---|
| PHP | ≥ 8.4 | продвигаемые свойства, new в инициализаторах, readonly |
flytachi/winter-kernel |
^4.0 | слой запросов: гидрация и валидация запроса таблицы |
flytachi/winter-ppa |
^1.0 | слой данных: репозитории, конструктор запросов, пагинатор |
ext-pdo |
— | приходит требованием CDO, через который работает слой данных |
Оба Winter-пакета объявлены в require и ставятся автоматически — отдельно требовать их
не нужно.
Установка
composer require flytachi/winter-mui-data-gridБольше ничего: ни провайдеров, ни публикации конфигов, ни записей в bootstrap. Классы
находятся автозагрузчиком по PSR-4 из пространства имён Flytachi\Winter\MuiDataGrid.
Что должно быть в проекте
Библиотека — надстройка, поэтому предполагает, что два слоя уже подняты.
Слой данных. Нужен настроенный репозиторий: класс конфигурации базы и репозиторий
поверх таблицы. Если у вас уже есть рабочие запросы через Repository::instance(),
всё готово.
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.
Проверка
Быстрее всего убедиться, что всё встало, собрав схему и построив по ней условие — база для этого не нужна:
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();Результат
a.title ILIKE :iqb0Дальше — Быстрый старт: рабочий эндпоинт от репозитория до таблицы в браузере.