2016-12-08 1 views
0

Ich habe zwei Entitäten: Lieferant und Kategorie trat ManyToMany.Wie Unterkategorien von Entität anzuzeigen?

Als nächstes habe ich eine Form Builder-Klasse, wo ich EntityType::class hinzufügen.

Kategorie Struktur:

id, categoryName, parentId - where parentIds value can be: 
0 - head category 
1 - subcategory 
etc 

I angezeigt werden müssen (in Zweig Vorlage) Kategorien mit Struktur:

Category1 
    Subcategory1 
    Subcategory2 
Category2 
    Subcategory3 
    Subcategory4 

etc., wo Kategorie sind eine Art von Header und der Subkategorie sind Kontrollkästchen.

Bitte jemand gibt mir einen Tipp, wie man das macht.

+0

Also nur Unterkategorien zu Lieferanten gebunden sind? – Yoshi

+0

Kategorie mit Struktur wie folgt aus: (parentId bestimmen, ob der Kategorie Kopf Kategorie oder Unterkategorie ist) id, category, parentId - wo parentIds Wert sein kann: 0 - Kopf Kategorie 1 - Subkategorie usw. – Dakotha

+0

Wie soll ich reagieren auf Das? Sie stellen eine Frage, ich versuche, weitere Informationen zu erhalten, Sie antworten, indem Sie die gleichen Informationen aus der Frage wiederholen. Hilf mir, dir zu helfen ... – Yoshi

Antwort

0

Aufbauend auf, was wir in den Kommentaren diskutiert, die in meiner Testumgebung gearbeitet folgenden:

In SupplierType::buildForm:

->add('categories', EntityType::class, [ 
    'class' => Category::class, 
    'choice_label' => 'name', 
    'group_by' => 'parent', 
    'multiple' => true, 
    'expanded' => true 
]) 

Obwohl wüst Anpassung dies machen würde nur das Kontrollkästchen ohne Header. Dies wird hier diskutiert: https://github.com/symfony/symfony/issues/5489#issuecomment-194943922

Umsetzung der Fix von MaxE17677 die Ansicht etwas würde wie folgt aussehen:

{% extends 'base.html.twig' %} 

{% form_theme form _self %} 

{# @see: https://github.com/symfony/symfony/issues/5489#issuecomment-194943922 #} 
{%- block choice_widget_expanded -%} 
    <div {{ block('widget_container_attributes') }}> 
     {% for name, choices in form.vars.choices %} 
      {% if choices is iterable %} 
       <label class="choice_category"> 
        <strong> 
         {{ choice_translation_domain is same as(false) ? name : name|trans({}, choice_translation_domain) }} 
        </strong> 
       </label> 
       <div> 
        {% for key,choice in choices %} 
         {{ form_widget(form[key]) }} 
         {{ form_label(form[key]) }} 
        {% endfor %} 
       </div> 
      {% else %} 
       {{- form_widget(form[name]) -}} 
       {{- form_label(form[name], null, {translation_domain: choice_translation_domain}) -}} 
      {% endif %} 
     {% endfor %} 
{%- endblock choice_widget_expanded -%} 

{% block body %} 
    <div class="container"> 
     {{ form_start(form) }} 
      {{ form_row(form.categories) }} 
     {{ form_end(form) }} 
    </div> 
{% endblock %} 

Vorschau:

Preview


Entscheidend ist, dass Sie group_by Feature der ChoiceType verwenden. Um dies mit Ihren aktuellen Entitäten zu verbinden, müssen Sie möglicherweise auch die query_builder Einstellung von EntityType verwenden. Etwas wie:

// ... 
'query_builder' => function (EntityRepository $er) { 
    return $er 
     ->createQueryBuilder('c') 
     ->where('c.parentId = 1') 
    ; 
}, 

zusammen mit:

// ... 
'group_by' => function ($category) { 
    // *pseudo-code* 
    return $category->getParent()->getName(); 
} 
+0

Ich werde dies in wenigen Stunden zu überprüfen, aber ich fühle es hilft ich viel. Danke Yoshi. – Dakotha

Verwandte Themen