PHP code example of tourze / easy-admin-tree-select-field-bundle

1. Go to this page and download the library: Download tourze/easy-admin-tree-select-field-bundle library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

tourze / easy-admin-tree-select-field-bundle example snippets


return [
    // ...
    Tourze\EasyAdminTreeSelectFieldBundle\EasyAdminTreeSelectFieldBundle::class => ['all' => true],
];

use Tourze\EasyAdminTreeSelectFieldBundle\Field\TreeSelectField;

public function configureFields(string $pageName): iterable
{
    yield TreeSelectField::new('categories')
        ->setData([
            ['id' => 1, 'label' => '根节点', 'parent_id' => null],
            ['id' => 2, 'label' => '子节点1', 'parent_id' => 1],
            ['id' => 3, 'label' => '子节点2', 'parent_id' => 1],
            ['id' => 4, 'label' => '孙节点', 'parent_id' => 2],
        ])
        ->setMultiple(true)
        ->setSearchable(true);
}

use Tourze\EasyAdminTreeSelectFieldBundle\DataProvider\ArrayTreeDataProvider;

yield TreeSelectField::new('categories')
    ->setDataProvider(new ArrayTreeDataProvider([
        ['id' => 1, 'name' => '电子产品', 'parent_id' => null],
        ['id' => 2, 'name' => '手机', 'parent_id' => 1],
        ['id' => 3, 'name' => '电脑', 'parent_id' => 1],
        ['id' => 4, 'name' => '智能手机', 'parent_id' => 2],
        ['id' => 5, 'name' => '功能手机', 'parent_id' => 2],
    ]))
    ->setMultiple(true);

use Tourze\EasyAdminTreeSelectFieldBundle\DataProvider\EntityTreeDataProvider;

public function __construct(
    private EntityManagerInterface $entityManager
) {}

public function configureFields(string $pageName): iterable
{
    yield TreeSelectField::new('categories')
        ->setDataProvider(new EntityTreeDataProvider(
            $this->entityManager,
            Category::class,
            [
                'id_field' => 'id',
                'label_field' => 'name',
                'parent_field' => 'parent'
            ]
        ))
        ->setMultiple(true)
        ->setExpandedLevel(2);
}

use Tourze\EasyAdminTreeSelectFieldBundle\DataProvider\AbstractTreeDataProvider;
use Tourze\EasyAdminTreeSelectFieldBundle\Model\TreeNode;

class CustomTreeDataProvider extends AbstractTreeDataProvider
{
    public function getTreeData(array $options = []): array
    {
        // 从你的数据源获取数据
        $data = $this->fetchDataFromSource();
        
        // 转换为树节点
        $nodes = [];
        foreach ($data as $item) {
            $node = new TreeNode(
                $item['id'],
                $item['name'],
                $item['parent_id']
            );
            $nodes[] = $node;
        }
        
        return $this->buildTree($nodes);
    }
    
    public function getRootNodes(): array
    {
        // 返回根节点
    }
    
    public function getChildrenNodes(mixed $parentId): array
    {
        // 返回子节点
    }
}

yield TreeSelectField::new('categories')
    ->setDataProvider(new CustomTreeDataProvider())
    ->setMultiple(true);

TreeSelectField::new('field_name')
    // 数据相关
    ->setDataProvider($provider)        // 设置数据提供者
    ->setData($arrayData)               // 直接设置数组数据
    
    // 选择相关
    ->setMultiple(true)                 // 是否多选
    ->setRequired(false)                // 是否必填
    ->setPlaceholder('请选择...')        // 占位符
    
    // 显示相关
    ->setExpandAll(false)               // 是否默认展开所有节点
    ->setExpandedLevel(2)               // 默认展开层级
    ->setMaxDepth(5)                    // 最大深度限制
    ->setShowCheckbox(true)             // 是否显示复选框
    
    // 功能相关
    ->setSearchable(true)               // 是否可搜索
    ->setSortable(false)                // 是否可排序
    ->setLazyLoad(false)                // 是否懒加载
    
    // 图标相关
    ->setNodeIcon('fa fa-folder')       // 节点图标
    ->setLeafIcon('fa fa-file')         // 叶子节点图标
;

[
    'id' => 1,                          // 节点ID(必需)
    'label' => '节点名称',               // 显示标签(必需)
    'parent_id' => null,                // 父节点ID
    'selectable' => true,               // 是否可选
    'expanded' => false,                // 是否默认展开
    'metadata' => [                     // 额外元数据
        'badge' => '新',
        'color' => 'primary'
    ]
]

class AsyncTreeDataProvider extends AbstractTreeDataProvider
{
    public function getTreeData(array $options = []): array
    {
        // 只加载根节点
        return $this->getRootNodes();
    }
    
    public function getChildrenNodes(mixed $parentId): array
    {
        // 按需加载子节点
        // 这可以通过 AJAX 请求实现
        return $this->loadChildrenFromApi($parentId);
    }
}

class SecureTreeDataProvider extends AbstractTreeDataProvider
{
    public function getTreeData(array $options = []): array
    {
        $nodes = parent::getTreeData($options);
        
        // 根据用户权限过滤节点
        return array_filter($nodes, function($node) {
            return $this->userHasAccessToNode($node);
        });
    }
    
    private function userHasAccessToNode($node): bool
    {
        // 检查用户权限
        return true;
    }
}
bash
php bin/console assets:install
bash
php bin/console assets:install --symlink
php bin/console cache:clear