besnovatyj/yii2-cms-tree-manager

Добавление управления Nested Sets в другие модули Yii2 CMS.

Maintainers

Package info

github.com/besnovatyj/yii2-cms-tree-manager

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-tree-manager

Transparency log

Statistics

Installs: 1

Dependents: 3

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-06 19:26 UTC

This package is auto-updated.

Last update: 2026-07-08 15:37:01 UTC


README

Yii2-фасад управления деревьями: TreeManager (CRUD-фасад), generic TreeController (9 экшенов), PHP TreeWidget + AssetBundle с собранным JS-виджетом, TreeDataSource (AR → DTO), TreeQueryScope (read-утилиты). Потребители (menu, catalog, actors, …) импортируют только Besnovatyj\TreeManager\Manager\*.

Три пакета

Пакет Тип Роль
@besnovatyj/tree-widget-core npm TS-виджет дерева (framework-agnostic, порт ITreeDataSource)
besnovatyj/yii2-nested-sets composer PHP-ядро Nested Sets (Service/Repository/ColumnMap/Exception)
этот пакет composer фасад: связывает виджет и ядро в Yii2-модулях

Структура пакета

assets/src/        # тонкий entry: реэкспорт npm-ядра (+ yii2-дефолты, если появятся)
assets/dist/       # собранный IIFE-бандл + CSS — его публикует TreeAsset (коммитится)
esbuild.js         # сборка assets/src -> assets/dist (бандлит @besnovatyj/tree-widget-core)
package.json       # private, сборочный (не публикуется в npm)
src/nested-sets-manager/   # PHP-фасад (подробный README и примеры интеграции — внутри)
docs/ACCEPTANCE-CHECKLIST.md  # чеклист приёмки изменений (фаза 0)
TODO.MD            # план и журнал разделения на пакеты

Сборка фронтенда

При правках ядра — сначала опубликовать его, затем пересобрать фасад:

# 1. ядро (packages/npm/tree-widget-core): npm publish  (prepublishOnly: build + types)
# 2. фасад (корень этого пакета):
npm update @besnovatyj/tree-widget-core && npm run build

assets/dist/ коммитится (точнее — едет с пакетом: composer-потребителю npm не нужен).

Интеграция в модуль

Полное руководство (DI-контейнер, Node/формы, controllerMap, TreeWidget-конфиг, endpoints, серверные формы) — src/nested-sets-manager/README.md. Кратко:

// Module.php
$this->controllerMap['category'] = [
    'class' => TreeController::class,
    'treeManager' => Instance::of('gallery.tree.manager'),
    'dataSource' => new TreeDataSource(Category::class, ...),
    'createFormClass' => CategoryForm::class,
    'updateFormClass' => CategoryForm::class,
    'formView' => '@Besnovatyj/Gallery/views/backend/category/_form',
    // серверный enforcement прав (опционально; `permissions` виджета — только UX):
    'checkAccess' => fn(string $op, ?Node $node) => Yii::$app->user->can("gallery.tree.{$op}"),
];

Контракт ошибок (TreeController::execute()): доменные (NestedSetsException, DomainException) → HTTP 422 со своим сообщением; ошибки валидации форм → 200 + success:false + errors; прочее → детали в лог, наружу нейтральный 500.

License

MIT — см. LICENSE. Автор: Besnovatyj.