Рендеринг древовидной иерархии в Symfony 4

Я изучаю Symfony 4 и хотел бы отображать свои категории и подкатегории в виде дерева с флажками (и подкатегориями) в форме (для моих продуктов: ProduitType), например:

[ ]Category 1
     [ ]Sub Category 1
         [ ]Sub-Sub Category 1
     [ ]Sub Category 2
 [ ]Category 2 etc...

Моя форма ветки: new_produits.html.twig, Моя форма: ProduitType, Мой класс: Категория

Я пробовал много вещей в своей ветке, но в Symfony 4 больше нет подсказок, если кто-то может дать мне несколько советов, пожалуйста, скажите мне.

 <form method = "post">
                                    {{ form_start(form) }}

                                    <h5 class = "text-center"> Informations </h5>
                                    {{ form_row(form.etat) }}
                                    {{ form_row(form.filename) }}
                                    {{ form_row(form.nom) }}
                                    {{ form_row(form.reference) }}
                                    {{ form_row(form.Gencod) }}
                                    {{ form_row(form.upc) }}
                                    {{ form_row(form.prix_base) }}
                                    {{ form_row(form.prix_final) }}

                                    {{ form_row(form.description) }}
                                    {{ form_row(form.short_description) }}
                                    {{ form_row(form.profondeur) }}
                                    {{ form_row(form.id_manufacturer) }}
                                    {{ form_row(form.weight) }}
                                    {{ form_row(form.unite) }}
                                    {{ form_row(form.prix_unite) }}
                                    <hr>
                                    <h5 class = "text-center"> Caractéristiques </h5>

                                    {{ form_row(form.conditionnement) }}
                                    {{ form_row(form.unite_par_carton) }}
                                    {{ form_row(form.nb_carton_palette) }}
                                    {{ form_row(form.dlv_garantie) }}
                                    {{ form_row(form.dlv_theorique) }}
                                    {{ form_row(form.unite_par_couche) }}
                                    {{ form_row(form.produit_bio) }}
                                    {{ form_row(form.produit_nouveau) }}
                                    {{ form_row(form.produit_belle_france) }}

                                    <hr>
                                    <h5 class = "text-center"> Associations </h5>
                                    
                                    <!-- This is my problem -->
                                    {{ form_row(form.id_categorie) }}




                                    <div class = "form-group row text-right">
                                        <div class = "col float-right col-sm-10 col-lg-9 offset-lg-0">
                                            <button type = "submit" class = "btn btn-space btn-primary">Enregistrer</button>

                                            {{ form_end(form) }}
->add('id_categorie',EntityType::class,[
                'required' =>false,
                'attr' => ['id' => 'data-value'],
                'class' => Categorie::class,
                'choice_label' => 'nom',
                'expanded' => true,
                'multiple' => true,
                'group_by' => 'id_parent',
                'label' => 'Catégorie',
                'query_builder' => function (CategorieRepository $c) {
                        $queryBuilder = $c->createQueryBuilder('c');
                        $query = $queryBuilder
                            ->where($queryBuilder->expr()->isNotNull('c.id_parent'));
                        return $query;
                }
namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Entity(repositoryClass = "App\Repository\CategorieRepository")
 */
class Categorie
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type = "integer")
     */
    private $id;

    /**
     * @ORM\Column(type = "string", length=255, nullable=true)
     */
    private $nom;

    /**
     * @ORM\OneToMany(targetEntity = "App\Entity\Produit", mappedBy = "id_categorie")
     */
    private $id_produit;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity = "Categorie", inversedBy = "children")
     * @ORM\JoinColumn(referencedColumnName = "id", onDelete = "CASCADE")
     */
    private $id_parent;


    /**
     * @Gedmo\TreeLeft
     * @ORM\Column(type = "integer",nullable=true)
     */
    private $lft;

    /**
     * @Gedmo\TreeLevel
     * @ORM\Column(type = "integer",nullable=true)
     */
    private $lvl;

    /**
     * @Gedmo\TreeRight
     * @ORM\Column(type = "integer",nullable=true)
     */
    private $rgt;

    /**
     * @Gedmo\TreeRoot
     * @ORM\ManyToOne(targetEntity = "Category")
     * @ORM\JoinColumn(referencedColumnName = "id", onDelete = "CASCADE")
     */
    private $root;

    /**
     * @ORM\OneToMany(targetEntity = "Categorie", mappedBy = "id_parent")
     * @ORM\OrderBy({"lft" = "ASC"})
     */
    private $children;

Вы когда-нибудь делали эту работу? Ищу то же самое

gvf 16.03.2020 23:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
773
1

Ответы 1

Вы нашли путь?

Попробуй это:

$options = array(
    'decorate' => true,
    'rootOpen' => '<ul>',
    'rootClose' => '</ul>',
    'childOpen' => '<li>',
    'childClose' => '</li>',
    'nodeDecorator' => function($node) {
                            return '<input type = "checkbox" id = "check"'. $node['id'] .'> <a class = "tag-li" href = "#" onclick = "clicked(this)" data-id = "' . $node['somefield'] . '">'.$node['someotherfield'].'</a>';
                        });

get_your_entity_manager()->getRepository(Categorie::class)->childrenHierarchy(
            null, /* starting from root nodes */
            false, /* false: load all children, true: only direct */
            $options);

Чтобы выполнить эту работу, вам понадобится репозиторий, который реализует метод «childrenHierarchy», или используйте аннотацию репозитория Gedmo с одним изменением в вашей сущности, чтобы

@ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")

Надеюсь это поможет

Другие вопросы по теме