2016-12-08 2 views
0

У меня есть два объекта: Поставщик и категория, связанные с ManyToMany.Как отображать подкатегории из сущности?

Далее у меня есть класс построителя форм, где я добавляю EntityType::class.

Категория структура:

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

мне нужно отобразить (в шаблоне прута) категории со структурой:

Category1 
    Subcategory1 
    Subcategory2 
Category2 
    Subcategory3 
    Subcategory4 

и т.д., где Категория являются своего рода заголовок и подкатегории являются флажков.

Пожалуйста, дайте мне совет, как это сделать.

+0

Так только подкатегорий прикрепляются к поставщикам? – Yoshi

+0

Категории со структурой, как это: (ParentID определить, категория категория головы или подкатегория) идентификатора, CategoryName, ParentID - где значение parentIds может быть: 0 - глава категория 1 - подкатегория и т.д. – Dakotha

+0

Так как я должен реагировать на что? Вы задаете вопрос, я пытаюсь получить дополнительную информацию, вы отвечаете, повторяя ту же информацию из вопроса. Помогите мне помочь ... – Yoshi

ответ

0

Опираясь на то, что мы обсуждали в комментариях, следующая работал в моей тестовой среде:

В SupplierType::buildForm:

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

Хотя без формы настройки это будет только оказывать флажки без заголовков. Это обсуждается здесь: https://github.com/symfony/symfony/issues/5489#issuecomment-194943922

Реализация исправления по MaxE17677 вид будет выглядеть что-то так:

{% 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 %} 

Просмотр:

Preview


Главное, чтобы вы использовали функцию group_by функции ChoiceType. Чтобы это работало с вашими текущими объектами, вам может потребоваться также установить query_builder значение EntityType. Что-то вроде:

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

вместе с:

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

Я собираюсь проверить это через несколько часов, но я чувствую, что это помогает меня много. спасибо Йоши. – Dakotha

Смежные вопросы