我创建了这样的FormClass:
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
/*.some code.*/
->add('parent', EntityType::class, array(
'class' => Category::class,
'choice_label' => 'category_name'
))
/*.some code.*/
;
}
这会在选择菜单中加载所有类别。但是我希望向所有父母的孩子们展示树视图:
Root
- Category1
-- sub_category1
-- sub_category2
--- sub_category1_of_sub_category2
- Category2
-- sub_category3
为此,我需要递归函数来处理它。
如果EntityType具有类似query_builder
的选项,它给我class
选项的所有结果,我可以解决我的问题。
更新1 我的桌子喜欢它:
id | title | parent
1 Category1 Null
2 sub_category1 1
3 sub_category2 1
4 sub_category1_of_subcategory2 3
5 Category2 Null
6 sub_category3 5
答案 0 :(得分:0)
我建议您使用StofDoctrineExtensionsBundle 来处理树实体
它将允许您创建树html元素。
$options = array(
'decorate' => true,
'rootOpen' => '<ul>',
'rootClose' => '</ul>',
'childOpen' => function ($node) {
return '<li id="' . $node['id'] . '" class="employee">';
},
'childClose' => '</li>',
'nodeDecorator' => function ($node) {
return '<input type="checkbox" /><span>' . mb_substr($node['name'],0,1,'utf-8'). '.' . $node['surname'] . '</span>';
}
);
$tree = $repo->childrenHierarchy(
$root, /* starting from root nodes */
false, /* false: load all children, true: only direct */
$options,
true,//include node
false /*include disabled*/
);