2012-02-16 25 views
5

Tôi có một bảng Categories, được xây dựng với kiến ​​trúc cây, sử dụng học thuyết Tree mở rộng và nó trông giống như sauSymfony2, Học thuyết Extensions Tree: Tạo một "cây" -như thả xuống Chọn danh sách

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 

và trực quan như thế này:

Movies 
| 
| 
|->Packs 
|->Dubbed 

bây giờ tôi muốn hình thức tạo ra cho thêm đánh giá, và tải loại dạng danh sách thả xuống cho mỗi bộ phim, vì vậy tôi có trong phim xem xét hình thức-type-lớp học của tôi

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',));   
} 

mà tạo ra một trình đơn thả xuống bình thường như thế này:

enter image description here

làm thế nào tôi có thể cấu hình các thiết lập trình đơn của tôi, vì vậy nó tạo ra một Tree-Like-thả xuống chọn như thế này?

enter image description here

Trả lời

14

Tôi không chắc chắn đây là một ý tưởng tốt: người dùng sẽ không thể gõ vào lựa chọn của họ.

đã không được thử nghiệm giải pháp này, nhưng nó cũng làm việc:

Trước tiên, bạn có thể sắp xếp ba bởi gốc và giá trị so lft để hiển thị nó đúng cách, vì vậy thêm một người thợ xây truy vấn:

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

sau đó, bạn cần phải thêm một phương pháp getIndentedTitle để tổ chức của bạn:

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

Cuối cùng, thêm một lựa chọn tài sản để lựa chọn của bạn khi bạn xây dựng các hình thức, để hiển thị ảo tài sản indentedTitle thay vì tiêu đề:

'property' => 'indentedTitle' 

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

Các vấn đề liên quan