2011-08-23 6 views
9

Symfony 2에서 데이터베이스 테이블의 값으로 선택 목록을 만들려면 어떻게해야합니까?Symfony 2 선택 목록이있는 양식

나는 두 기관이 있습니다 학생과 ManyToOne 관계와 교실을하고 나는 folowing 필드가있는 양식을 작성해야합니다 : 목록을 선택 (이름, , 나이, 교실을 사용 가능한 클래스에서). 내 학생 양식에서

내가 가진 내 교실 양식에서

$builder 
     ->add('name') 
     ->add('surname') 
     ->add('age') 
     ->add('classroom', new ClassroomType()) 
    ; 

나는이 있습니다

$classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll(); 
    $builder 
     ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName()))); 

나는이 다음과 같은 오류 얻을 :

Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13   

종류를 감사합니다, Cearnau Dan

+0

설명입니다 http://groups.google.com/group/symfony2/browse_thread/thread/ da8f72b33f9f93ba – tttony

답변

24

아직 답을 찾지 못했지만 내 프로젝트에 대해 알아 내려고 노력했는데 확실하지 않습니다.

양식 클래스가 컨트롤러처럼 Doctrine을 사용하도록 설정되어 있지 않으므로 같은 방식으로 엔터티를 참조 할 수 없습니다. Doctrine 엔티티에서 옵션을로드 할 수있게 해주는 특수 유형 필드 유형 인 entity Field Type을 사용하고 싶습니다.

오케이 너무 짧습니다. 대신 당신이 선택 필드를 생성하고있는 무슨 일을 이렇게 : 당신이 저장소 또는 무엇에 query_builder 기능을 배치 할 수 있다면

->add('category', 'entity', array(
    'class' => 'VendorWhateverBundle:Category', 
    'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); }, 
    'property' => 'name', 
)) 

는 잘 모르겠어요, 난 종류의 I로 격렬하게 요동 해요 가기. 지금까지 필자가 위에 링크 된 문서는 무엇을 해야할지에 대해 명확합니다. 나는 다음 단계가 Doctrine's QueryBuilder에 위로 읽는다는 것을 짐작한다. 당신이 거기에있는 동안

나는 당신은 아마 자신의 교실을 만드는 사람을 원하지 않는다, 당신은 당신이 교실 양식을 내장하고있는 비트를 드롭 할

->add('classroom', new ClassroomType()) 

생각합니다. 네가하지 않으면, 그래. 엔티티 매핑하는 경우

+0

예, 엔티티 필드 유형이 필요합니다. – ziiweb

+0

방금 ​​시간이 많이 걸렸습니다. +1 –

0

,이 심포니 2.8 이상을위한 깨끗한 솔루션이나 여기 3+

<?php 

namespace My\AppBundle\Form\Type; 

use My\AppBundle\Entity\Student; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class StudentType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('surname') 
      ->add('age') 
      /* 
      * It will be resolved to EntityType, which acts depending on your doctrine configuration 
      */ 
      ->add('classroom'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(['data_class' => Student::class]); 
    } 
}