2014-04-26 2 views
0

을 선택 가능하고, 나는 사용자의 이메일의 테이블이 (내 데이터베이스에서 엔티티) :Symfony2 - 엔티티의 목록 내 Symfony2에서

{% for email in emails %} 
    ... 
    {{ email.subject }} 
    ... 
{% endfor %} 

이 나는 ​​테이블을 배치하여 이러한 선택을하고 싶습니다 양식을 만들고 각 행에 체크 상자를 추가하십시오.

Symfony2에서 가장 좋은 방법은 무엇입니까? 난 단지 내가 이상적이지 보이는 유형, 내부 형 내부 유형을 만들 필요가 있다고 생각 할 수 있습니다

class SelectableEmailsType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('selectableEmails', 'collection', [ 'type' => new SelectableEmailType() ]); 
    } 

    public function getName() 
    { 
     return 'selectableEmails'; 
    } 
} 

class SelectableEmailType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('email', new EmailType()); 
     $builder->add('selected', 'checkbox'); 
    } 

    public function getName() 
    { 
     return 'selectableEmail'; 
    } 
} 

class EmailType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('subject', 'text'); 
     ... 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => 'EmailOctopus\Bundle\ListsBundle\Entity\ListEntity', 
     ]); 
    } 

    public function getName() 
    { 
     return 'email'; 
    } 
} 
+0

EMAILTYPE는 다른 형태로 사용되는 경우는 특히 무엇이 꽤 많이있다 :이 솔루션을 사용하여 체크 박스에 각 이메일의. 이런 종류의 중첩은 아주 일반적입니다. 물론 정말로해야 할 일은 전자 메일을 선택하는 것 (그리고 제목을 편집하지 않는 것)이면 EmailType이 필요하지 않습니다. – Cerad

+0

@Cerad 감사합니다. 알고있는 것이 좋습니다. 전자 메일을 선택하기 만하면됩니다. 전자 메일 유형을 제거하면 엔티티를 어떻게 바인딩해야합니까? – Jonathan

+0

이메일 엔티티는 수정하지 않으므로 바인딩 할 필요가 없습니다. 대신 vars 매개 변수를 사용하여 나뭇 가지 템플릿에서 직접 액세스 할 수 있습니다. {{selectableEmail.vars.email.subject}} – Cerad

답변

1

이것은 바인딩 질문에 대답한다. 당신이 selectableEmails의 목록을 당겨 실제로 선택 목록을 가져올 수 그것을 통해 실행됩니다 게시 된 양식을 처리 한 후

// Query a list of emails 
$emails = $emailRepository->findAll(); 

// Turn them into selectable emails 
$selectableEmails = array(); 
foreach($emails as $email) 
{ 
    $selectableEmails[] = array('email' => $email, 'selected' => false); 
} 

// Pass this to the root form 
$formData = array('selectableEmails' => $selectableEmails); 

.

이것은 하나의 접근 방법입니다. 엔티티 자체를 변경하지 않고 엔티티에 추가 양식 관련 속성을 추가하는 데 적합합니다.

+0

고맙습니다. 'foreach'에서'SelectableEmail' 모델을 사용하지 않아야합니까? – Jonathan

관련 문제