承接 besnovatyj/yii2-nested-sets 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

besnovatyj/yii2-nested-sets

Composer 安装命令:

composer require besnovatyj/yii2-nested-sets

包简介

Nested Sets ядро для Yii2: Service/Repository/ColumnMap без привязки к конкретному модулю. Одна из реализаций дерева для besnovatyj/yii2-cms-tree-manager.

README 文档

README

Nested Sets ядро для Yii2: операции над деревом без behavior-методов на AR-моделях и без привязки к конкретному модулю. Multi-tree (tree-колонка), глубина (depth), опциональная сортировка корней отдельной колонкой (sort_order).

Выделено из besnovatyj/yii2-cms-tree-manager (фаза 3 плана разделения — TODO.MD того пакета). Tree-manager — фасад работы с деревом; этот пакет — одна из реализаций (абстракция «других подходов» — materialized path и т.п. — появится отдельной фазой, когда возникнет вторая реализация).

Состав

Класс Роль
NestedSetsService Высокоуровневые операции: create (root/prepend/append/before/after), move (включая makeRoot и сортировку корней moveRootBefore/After/ToFirst/ToLast/ToPosition, swapRoots, reindexRoots), delete (deleteWithChildren / deletePromotingChildren / deleteLeaf). Все операции — в транзакции.
NestedSetsRepository Низкоуровневая работа с БД: выборки (roots/parents/descendants/children/leaves/prev/next), предикаты (isRoot/isLeaf/isChildOf), populateTree, сдвиги lft/rgt (shift), вставка/перемещение/удаление на уровне запросов.
NestedSetsColumnMap Карта структурных колонок (lft/rgt/depth/tree/sort) — имена не хардкодятся; по ней же определяется, какие атрибуты модели «структурные», а какие — пользовательские.
NestedSetsException Доменное исключение (нарушение инвариантов дерева: второй корень в single-tree, вставка before/after корня, перемещение в собственного потомка и т.п.). В фасаде маппится на HTTP 422.

Использование

use Besnovatyj\NestedSets\NestedSetsColumnMap;
use Besnovatyj\NestedSets\NestedSetsRepository;
use Besnovatyj\NestedSets\NestedSetsService;

$columns = new NestedSetsColumnMap(
    leftAttribute: 'lft',
    rightAttribute: 'rgt',
    depthAttribute: 'depth',
    treeAttribute: 'tree',        // null — режим одного дерева
    sortAttribute: 'sort_order',  // null — корни без отдельной сортировки
);

$repository = new NestedSetsRepository(Menu::class, $columns, Yii::$app->db);
$service = new NestedSetsService($repository);

$service->createRoot($menu);                  // новый корень (вернёт id)
$service->appendTo($parent, $item);           // последним ребёнком
$service->moveBefore($node, $target);         // перед узлом
$service->makeRoot($node);                    // поддерево -> новый корень
$service->moveRootBefore($rootA, $rootB);     // сортировка корней (sort_order)
$service->deleteWithChildren($node);          // удалить с поддеревом
$service->deletePromotingChildren($node);     // удалить, подняв детей к родителю

Требования к таблице: lft/rgt/depth (имена настраиваются), при multi-tree — колонка дерева, при сортируемых корнях — колонка сортировки у корней.

Контракты

  • Доменные ошибки — только NestedSetsException (extends RuntimeException): ловите его на границе (см. TreeController::execute() фасада — 422 наружу).
  • Операции сервиса транзакционны; репозиторий транзакций не открывает.
  • Пакет зависит только от yiisoft/yii2 (yii\db\*).

Связанные пакеты

  • besnovatyj/yii2-cms-tree-manager — Yii2-фасад: TreeManager/TreeDataSource, PHP TreeWidget, generic TreeController (использует этот пакет).
  • @besnovatyj/tree-widget-core (npm) — TS-виджет дерева, клиентская сторона.

License

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

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-06

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固