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