umanit/ easyadmin-tree-bundle
为EasyAdmin添加分类树功能的插件
0.0.5
2022-11-03 11:30 UTC
Requires
- php: ^8.0
- doctrine/dbal: ^3.4
- doctrine/doctrine-bundle: ^2.7
- doctrine/orm: ^2.13
- easycorp/easyadmin-bundle: ^4.4
- gedmo/doctrine-extensions: ^3.9
- stof/doctrine-extensions-bundle: ^1.7
- symfony/config: ^5.4|^6.0
- symfony/dependency-injection: ^5.4|^6.0
- symfony/doctrine-bridge: ^5.4|^6.0
- symfony/form: ^5.4|^6.0
- symfony/options-resolver: ^5.4|^6.0
- symfony/translation: ^5.4|^6.0
README
为EasyAdmin添加分类树功能的插件
功能
- 在索引页上以树形结构显示内容的条目
- 在索引页上通过树形侧边栏过滤内容的条目
- 在表单上提供一个TreeField来管理树形结构
安装
$ composer require umanit/easyadmin-tree-bundle
配置
需要在您的Twig配置中声明模板路径
twig: paths: '%kernel.project_dir%/vendor/umanit/easyadmin-tree-bundle/Resources/views': UmanitEasyAdminTreeBundle
此包依赖于StofDoctrineExtensionsBundle,请确保它已正确配置: 文档。您需要:
- 将树扩展添加到您的映射
doctrine: orm: entity_managers: default: mappings: gedmo_tree: type: annotation prefix: Gedmo\Tree\Entity dir: "%kernel.project_dir%/vendor/gedmo/doctrine-extensions/src/Tree/Entity" alias: GedmoTree # (optional) it will default to the name set for the mapping is_bundle: false
- 激活树扩展
stof_doctrine_extensions: default_locale: en_US orm: default: tree: true
用法
管理分类树
通过扩展AbstractTreeItem创建您的分类实体
<?php // src/Entity/Category.php namespace App\Entity; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Umanit\EasyAdminTreeBundle\Entity\AbstractTreeItem; #[ORM\Entity] #[ORM\Table(name: 'app_category')] class Category extends AbstractTreeItem { ... }
通过扩展TreeCrudController创建您的分类CRUD控制器
<?php // src/Controller/Admin/MyTreeCrudController.php namespace App\Controller\Admin; use App\Entity\Category; use EasyCorp\Bundle\EasyAdminBundle\Config\Action; use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Field\IdField; use EasyCorp\Bundle\EasyAdminBundle\Field\SlugField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use Umanit\EasyAdminTreeBundle\Controller\TreeCrudController; use Umanit\EasyAdminTreeBundle\Field\TreeField; class MyTreeCrudController extends TreeCrudController { public static function getEntityFqcn(): string { // return your Category entity FQCN return Category::class; } protected function getEntityLabelProperty(): string { // return the property of your category to use as a label in tree display return 'name'; } }
在EasyAdmin仪表板中启用CRUD
public function configureMenuItems(): iterable { return [ ... MenuItem::linkToCrud('Categories', 'fas fa-list', Category::class), ... ]; }
添加树形侧边栏
要为现有的CRUDController启用树形侧边栏,您必须使其扩展AbstractCategorizedCrudController
<?php // src/Controller/Admin/MediaCrudController.php namespace App\Controller\Admin; use App\Entity\Category; use App\Entity\Media; use Umanit\EasyAdminTreeBundle\Controller\AbstractCategorizedCrudController; class MediaCrudController extends AbstractCategorizedCrudController { public static function getEntityFqcn(): string { return Media::class; } public function configureCrud(Crud $crud): Crud { $crud = parent::configureCrud($crud); // ... } public static function getCategoryFqcn(): string { // The FQCN of the entity to use as a category (should extend AbstractTreeItem) return Category::class; } protected static function getCategoryPropertyName(): string { // the name of the category property for the entity managed by this CRUDController return 'category'; } protected function getDefaultCategoryId(): int { // The id of the category that will be used as default filter for the index page of your CRUD return $this->getCategoryRepository()->findOneBy(['parent' => null])->getId(); } }
在您的表单中使用TreeField
只需在EasyAdmin configureFields函数中添加字段即可
<?php // src/Controller/Admin/MediaCrudController.php namespace App\Controller\Admin; use Umanit\EasyAdminTreeBundle\Field\TreeField; class MediaCrudController extends AbstractCategorizedCrudController { public function configureFields(string $pageName): iterable { return [ // ... TreeField::new('category', 'My category'), // ... ]; }
屏幕截图
待办事项
需要改进的列表
- 折叠/展开分类
- 使用拖放重新排序分类项
- 在TreeField中预填当前侧边栏中的分类
- 改进前端(设计,CSS)