2012-02-16 17 views
5

açılır seç listesi gibi bir "ağaç", oluşturma ve görsel buSymfony2'nin, Doktrin Uzantıları Ağacı: Doktrin Ağacı Uzantısı kullanarak Ağaç mimarisi ile inşa Ben Kategoriler tablosunu var

id parent_id title lft lvl rgt root 
864 (NULL) Movies 1 0 18 864 
865 864 Packs 2 1 3 864 
866 864 Dubbed 4 1 5 864 

ve şöyle görünür böyle:

şimdi her film için açılır listeden olarak yorumlar ve yükleme kategoriler ekleyerek için oluşturulan forma istiyorum, bu yüzden benim film-review form-tip-sınıfında var
Movies 
| 
| 
|->Packs 
|->Dubbed 

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

    $builder->add('name'); 
    $builder->add('file'); 
    $builder->add('cover'); 
    $builder->add('category','entity',   array('class'=>'Tracker\MembersBundle\Entity\Category', 'property'=>'title',));   
} 
bu gibi normal açılır menü oluşturur

:

enter image description here

nasıl benim menü ayarlarını yapılandırabilirsiniz, bu yüzden bir Ağaç gibi-açılır böyle seçmek üretir?

enter image description here

cevap

14

Bunun iyi bir fikir olduğundan emin değilim: Kullanıcıların seçim yazmaya mümkün olmayacaktır.

bu çözümü test mı, ancak çalışması gerekir:

İlk olarak, düzgün görüntülemek için root ve lft değerine göre üç sıralamak, bu yüzden bir sorgu oluşturucu ekleyebilirsiniz:

'query_builder' => function($er) { 
    return $er->createQueryBuilder('c') 
     ->orderBy('c.root', 'ASC') 
     ->addOrderBy('c.lft', 'ASC'); 
}, 

Ardından, varlığa bir getIndentedTitle yöntemi eklemek gerekir:

Nihayet
public function getIndentedTitle() { 
    return str_repeat("--", $this->lvl).$this->title; 
} 

, seçenekleriniz bir özellik seçeneği eklemek sanal görüntülemek için, formu oluştururken yerine başlığın mülkiyet indentedTitle:

'property' => 'indentedTitle' 

Bkz: http://symfony.com/doc/current/reference/forms/types/entity.html