2011-08-23 31 views
9

Symfony 2'deki veritabanı tablosundaki değerlerle bir seçim listesi nasıl oluşturabilirim?Symfony 2 Seçim listesi ile form

Ben 2 varlık vardır: Öğrenci ve ManyToOne ilişkisi Sınıf ve ben folowing alanları ile bir form oluşturmak gerekir: listeyi seçin (adını, soyadını, yaş, sınıf mevcut sınıflardan). Benim Öğrenci Formu yılında

i var benim Sınıf Form yılında

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

i bu var:

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

Bunu aşağıdaki hatayı alıyorum:

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   

Tür Saygılarımızla, Cearnau Dan

+0

açıklamaları verilmiştir: http://groups.google.com/group/symfony2/browse_thread/thread/ da8f72b33f9f93ba – tttony

cevap

24

Henüz bir cevap bulup bulmadığınızdan emin değilim, ancak kendi projem için bunu anlamak için biraz kazımak zorunda kaldım.

Form sınıfı, denetleyicinin olduğu gibi Doctrine'yi kullanacak şekilde ayarlanmamıştır, böylece Varlığa aynı şekilde başvuruda bulunamazsınız. Yapmak istediğiniz şey, yapmaya çalıştığınız bir Doktrin varlığından seçenekleri yüklemenizi sağlayan özel bir Alan Türü olan entity Field Type'u kullanmaktır.

Pek çok kısa hikaye. Bunun yerine seçim alanı oluşturmak ne yaptığını yapmanın Bunu yapmak: Bir depo ya da ne içine query_builder fonksiyonunu yerleştirmek eğer

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

emin değilim, ben tür I olarak çılgınca sallanan ediyorum gitmek. Bu noktaya kadar, yukarıda bağlandığım dokümanlar, ne yapılacağı konusunda oldukça açık. Bir sonraki adım Doctrine's QueryBuilder üzerinden okumaktır. Orada olduğumuz süre

Ben Muhtemelen kendi sınıfları oluşturarak insanları istemiyoruz, size Sınıf formu katıştırma biraz damla istiyorum

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

düşünüyorum. Yapmadıkça evet. varlıkları eşleştirilir ise

+0

Evet, varlık Alan Türü, ihtiyacım olan şey. – ziiweb

+0

Az önce bana birkaç saat kurtardın, +1 –

0

, bu Symfony 2.8+ için temiz çözüm ya da burada 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]); 
    } 
} 
İlgili konular