以symfony形式显示选择菜单上的父视图,如树视图

时间:2018-05-19 13:19:19

标签: php symfony symfony-3.3

我创建了这样的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

1 个答案:

答案 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*/
        );