2011-05-11 23 views
6

Symfony 2.0'da, formda bire bir ilişkiyi kullanarak bir açılır liste nasıl oluşturulur? İyi örnek verebilir misiniz lütfen?Formda bire bir ilişki?

+0

adresinde bulunabilir. Ne istediğinize dair daha fazla bilgi verebilir misiniz? – Riley

+0

Birebir ilişkili tablodan combobox oluşturmak istiyorum. – Zeck

cevap

11

Sorunuzu, anladığım şekilde yanıtlamaya çalışacağım. Tek bir University nesnesine bağlı bir Faculty nesnesinin olduğunu varsayalım. Yani bir fakülteyi oluşturmak veya düzenlemek için kullanılan formda, veritabanındaki tüm üniversitenin birleşik kutusunu gösteriyorum ve kullanıcı aralarından birini seçiyor. Tam olarak bunu yapan bir özel Symfony alan türü vardır: varlık türü.

// Application\AcmeBundle\Form\Type\FacultyType 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('name'); 
    $builder->add('university', 'entity', array(
     // The class of the entity used as a combo box item 
     'class' => 'AcmeBundle:University', 

     // The property of the entity displaying the entity as text 
     'property' => 'name', 

     // The query builder used to populate the combo box, accepts 
     // a QueryBuilder object or a \Closure like below 
     'query_builder' => function(EntityRepository $repository) { 
      // This will return a query builder selecting all universities 
      return $repository->createQueryBuilder('u'); 
     } 
    )); 
} 

Not: varlık alan türü için ayarlanabilir diğer özellikler vardır, seni almaya davet Aşağıda ben fakülte formunu oluşturmak için kullanılan benim FacultyType nesne kullanmak buildForm yöntemin kodudur Daha fazla bilgi için bu page bir göz atın.

Oluşturulduğunda, bu veritabanında belirlediğim tüm üniversitelerle birleşik giriş kutusu gösterecektir. Kullanıcı formu kaydettiğinde, üniversite seçiciye formuna bağlı fakülte nesnesine atanmıştır. Bir açılır kutu yerine büyük olasılıkla bir açılır liste oluşturabilirsiniz. Birden fazla varlık seçmeniz gerekiyorsa, alan tipi öğenin 'multiple' seçeneği kullanışlı olabilir.

Bu söylenen örnekte, gösterdiğim örnek, bire-bir ilişki değil, daha çok Faculty nesnesi için Çok-bire ve University nesnesi için bire-birdir. Birebir bir ilişki, bir University'un benzersiz bir Address olduğu bir ilişki gibi bir şey olacaktır. Bu durumda, bir açılan kutu, üniversite yalnızca bir adrese sahip olabileceğinden, bir alt formun daha uygun olacağı için yararlı olmaz. Çok sayıda adres varsa, o zaman üniversite ile fakülteleri arasındaki ilişki gibi bire-bir ilişki haline gelir.

Sorunuzun doğru bir şekilde yanıtlanıp karşılanmayacağından emin değilsiniz, ancak umarım sizi nihai bir çözüme götürür.

Selamlar, Matt