показать детей родительского вида в виде дерева в меню выбора в форме Symfony - PullRequest
0 голосов
/ 19 мая 2018

Я создал 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, я могу решить мою проблему.

UPDATE 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 голосов
/ 19 мая 2018

Я бы порекомендовал вам использовать 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*/
        );
...