2014-09-23 2 views
7

예를 들어 phpMyAdmin과 같이 엔티티의 인스턴스를 렌더링하고 싶은 페이지에서 작업하고 있습니다.Symfony 2에서 폼 격자 만들기

더 구체적으로 말하자면, 열이 엔티티의 필드이고 행이이 엔티티의 모든 인스턴스이며, 모든 값 (ID 제외)을 편집 가능으로 만들고 데이터베이스에 저장하는 테이블을 얻고 싶습니다.

내 문제는 그 일을 수행하기위한 좋은 방법이 무엇인지, 그리고 Symfony에서 가능한 것이 무엇인지 (나는이 프레임 워크에서 아주 새로운 것입니다)입니다. 나의 첫 생각

  • 는 하나의 양식을 만드는 것이었다 그러나 에 하나의 형태로 여러 인스턴스를 결합 어려운 것 같다.

  • 또한 행당 양식을 만드는 것으로 간주되지만 모든 행에 자체 제출 필드가 있으므로 한 번에 두 개 이상의 행에 변경 사항을 저장할 수 없습니다.

  • Symfony의 문서에서 양식 컬렉션에 대한 주제를 봤지만 내 엔티티의 인스턴스가 완전히 독립적이기 때문에 사용할 수 있는지는 알 수 없습니다.

글쎄, 나는 그걸하고 싶지는 않다고 생각하지만, 그걸 할 방법을 찾지 못했을 것입니다.

모든 조언을 환영합니다. 감사합니다. "라 심포니 à "이렇게

답변

4

당신은 Collection 형의 필드를 가지고 예를 들어 AllRowsType를 들어, 기본 양식을 만들 수 있고, 각 행 하나를 입력 ROWTYPE이다 : 그런 다음을

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder    
      ->add('rows', 'collection', array(
       'type' => new RowType(), 
       'allow_add' => false, 
       'allow_delete' => false, 
       'by_reference' => false 
      )); 
    } 

RowType은 엔티티의 일반적인 형식입니다.

class RowType extends AbstractType { 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder    
      ->add('name', 'text'); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Acme\Bundle\DemoBundle\Entity\Row', 
     )); 
    } } 

유효성 검증은 일반적인 형태처럼 ROWTYPE에있을 수 있습니다,하지만 당신은 문제가 있다면, 당신은 당신의 AllRowsType의 기본 옵션에 cascade_validation이 => true로 설정 할 수 있습니다.

가 나뭇 가지에
{% for row in form.rows%} {{ form_row(row.name) }} {% endfor %} 

당신이 할 수있는 각 행의 엔티티의 ID 얻기 위해 :

{{ row.vars.value.id }} 

컨트롤러를, 당신이 할 수있는

은 당신이 할 수있는 나뭇 가지의 각 ROWTYPE을 반복하려면 $allrowsForm->get('rows')->getData() 그리고 행 개체의 ArrayCollection을 가지고 원하는대로 수행하십시오.

서식 모음을 처리하는 방법은 http://symfony.com/doc/current/cookbook/form/form_collections.html을 참조하십시오.

+0

감사합니다. 나는 이것을 시도하고있다. – ibi0tux