2013-05-06 2 views
1

정말 양식 작성에 도움이 필요합니다. 나는 엔티티$id, $name$items 속성을 가지고 있습니다. $items은 manyToMany 관계입니다. 그런 다음 다른 두 엔티티가 그룹입니다. 둘 다 $id$name 속성을가집니다. 그룹엔티티은 과 관련이 있습니다. 이런 식으로 뭔가 :Symfony2 그룹화 된 양식 항목

 
Group 1     Entity 1 
|- Item 1    |- Item 1 
'- Item 2    |- Item 2 
         '- Item 3 

Group 2     Entity 2 
|- Item 3    |- Item 2 
'- Item 4    |- Item 3 
         '- Item 4 

분류 항목 엔티티의 양식을 만들 수있는 가장 좋은 방법은 무엇입니까? 이처럼 :

 
---------------------------------------------------- 
Group 1 
☑ Item 1    ☑ Item 2 
---------------------------------------------------- 
Group 2 
☑ Item 3    ☑ Item 4 

이 구글하려고했지만, 솔직히 말해서, 나는 아무 생각도 없어 어디서부터 시작 :/

답변

2

좋아 ... 그래서 group_byoptgroup<select>에 넣는 것으로 나타났습니다. 난 그냥 choice_widget_collapsed을 복제하려고 내 양식 테마에서

{% form_theme form 'MyBundle::form_theme.html.twig' %} 
{{ form_widget(form.item) }} 
{{ form_rest(form) }} 

,하지만 약간의 차이 (예 : 값을 선택하면 확인)이 있습니다 : 내 템플릿에서

$builder->add('item', 'entity' array(
    'class' => 'MyBundle:Item', 
    'property' => 'name', 
    'multiple' => true, 
    'expanded' => true, 
    'group_by' => 'group.name', 
); 

을 : 내 EntityType 있습니다. 그렇게하는 것이 가장 좋은 방법인지는 모르겠지만, 저에게는 효과적입니다. 아마도 item 엔티티 선택 만 사용하고 다른 입력 필드는 사용하지 않았기 때문일 수 있습니다. 나의 서식 주제 :

{% block choice_widget_expanded %} 
{% spaceless %} 
    <div {{ block('widget_container_attributes') }}> 
     {% set options = choices %} 
     {{ block('choice_widget_expanded_options') }} 
    </div> 
{% endspaceless %} 
{% endblock choice_widget_expanded %} 

{% block choice_widget_expanded_options %} 
{% spaceless %} 
    {% for group_label, choice in options %} 
     {% if choice is iterable %} 
      <fieldset> 
       <legend>{{ group_label|trans({}, translation_domain) }}</legend> 
       {% set options = choice %} 
       {{ block('choice_widget_expanded_options') }} 
      </fieldset> 
     {% else %} 
      <input type="checkbox" name="{{ full_name }}[]" value="{{ choice.value }}"{% if value[choice.value] %} checked="checked"{% endif %}/> {{ choice.label|trans({}, translation_domain) }} 
     {% endif %} 
    {% endfor %} 
{% endspaceless %} 
{% endblock choice_widget_expanded_options %} 

개선되었습니다.

0

당신의 EntityType.php 파일에서 (이 당신의 엔티티에 따라 auto-generated 될 수 있습니다), 당신은 '다음과 같은 entity field type을 할 것이다 :

$builder->add('item', 'entity' array(
    'class' => 'YourNameSpace:Item', 
    'property' => 'name', 
    'multiple' => true, 
    'expanded' => true, 
    'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
     return $er->createQueryBuilder('i') 
      ->where('i.group = 1'); 
    } 
); 

은 분명히 당신은 당신의 특정 스키마 및 변수 이름에 따라 일부 조정을해야 할 것이다. 또한 그룹과 항목 간의 양방향 연관이 필요합니다. 또한 그룹 1의 선택기 만 추가합니다. 두 번째 그룹에 대해 비슷한 다른 것을 추가해야합니다.

+0

먼저'EntityType'에서 모든 그룹을 가져 와서 각각에 대해'$ builder-> add()'를 호출해야합니까? 그런 다음 또 다른 질문 - 나뭇 가지에 그런 그룹을 어떻게 표시할까요? 제가 제대로 이해하면 양식에 _items_ 밖에 없으니까요. – CRONUS

+0

확인. 나는 단지 그룹 ID를 변경하는 각각의 그룹에 대해'$ builder-> add ('item', 'entity', array())'를 시도했지만 형식에서는 마지막 그룹 항목 만 얻는다. 같은 이름의 'item' '때문인 것 같네요. ('i.group = 1') -> orWhere ('i.group = 2')'를 시도했지만이 그룹의 모든 항목을 가져옵니다. 양식보기 및 출력 그룹의 이름으로 항목을 그룹화하는 방법을 파악할 수 없습니다. – CRONUS

+0

''group_by '=>'item.group''도 시도했지만 성공하지 못했습니다. – CRONUS