2014-02-25 4 views
0

symfony2의 formbuilder가 콜렉션과 관련하여 어떻게 작동하는지 이해하는데 어려움이 있습니다.Symfony 폼 콜렉션을 테이블로 사용

나는 기본 양식 테마를 사용하여 다음과 같은 형태 빌더

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name', 'text') 
     ->add('datatypes', 'collection', array(
      'type'   => new DatatypeType(), 
      'allow_add'  => true, 
      'allow_delete' => true, 
      'prototype'  => true, 
      'by_reference' => false, 
      'label'   => false 
      )); 

} 

이 (form_div)이 다음과 같은 건설

<div data-prototype="..."> 
    <div> 
    <label>0</label> 
    <div> 
     <label> 
     <input> 
    <div> 
     <label> 
     <input> 

첫째, 왜이 "0"으로 레이블을 만들 않습니다를 만듭니다가 내용으로? "label"=> false를 시도했지만 여전히 생성됩니다.

두 번째로 나는 다음과 같이 컬렉션을 변경하고 싶지만 프로토 타입은 여전히 ​​form_div 테마에 의해 생성되므로 수동으로 formpart를 작성하더라도 사용할 수 없습니다.

<table> 
    <tr> 
    <th>Title 
    <th>Title 
    <tr> 
    <td> 
     <input> 
    <td> 
     <input> 
    <tr> 
    <td> 
     <input> 
    <td> 
     <input> 

원하는 결과를 얻으려면 어떻게해야합니까?

+0

이 질문을 두 개의 질문으로 나누어주십시오. ''질문에 대한 새 질문을 만드십시오. 이렇게하면 다른 사용자가 나중에 쉽게 답을 찾을 수 있습니다. – nifr

답변

1

0은 컬렉션에 자식 폼의 인덱스가 있습니다. 컬렉션을 구현하는 방법은 양식 필드를 필드별로 인쇄하는 것이 었습니다. 이 방법으로 거기에 있던 모든 레이블은 렌더링되지 않습니다. 여기 이 예는 다음과 같습니다

<form class="form-horizontal" role="form" action="{{ path('path') }}" method="POST"> 
    {{form_row(form.name)}} 
    <div class="collection-wrapper" data-prototype="{{ _self.datatype_prototype(form.datatypes.vars.prototype)|e }}"> 
     {% for datatype in form.datatypes %} 
      {{ _self.datatype_prototype(datatype) }} 
     {% endfor %} 
    </div> 
    {{ form_widget(form._token) }} 
</form> 

그리고 페이지

는, 어떤 블록에 포함되지 않은, 나는 프로토 타입을 표시하는 매크로를 만들 :

{% macro datatype_prototype(childForm) %} 
    {{ form_widget(childForm) }} 
{% endmacro %} 

아니, 당신까지 결정하는 것을하는 방법을 양식을 표시하고 다른 양식과 마찬가지로 childForm이 렌더링되는 방식을 사용자 정의 할 수 있습니다 (http://symfony.com/doc/current/cookbook/form/form_customization.html 참조).