2012-02-16 2 views
5

드롭 다운 목록 선택 - 유사 "나무"를, 생성과 시각이Symfony2, 교리 확장 트리 교리 트리 확장 를 사용하여 트리 구조로 구축 나는 카테고리 테이블이

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 

과 같이 보입니다 이 같은 :

지금은 각 영화에 대한 드롭 다운 목록으로 리뷰 및 로딩 카테고리를 추가 생성 형태에 원하는, 그래서 난 내 영화 리뷰 양식 형 클래스에있는
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',));   
} 
과 같은 일반적인 드롭 다운 메뉴를 생성

:

enter image description here

어떻게 내가 내 메뉴 설정을 구성 할 수 있습니다, 그래서 그것은 트리 -처럼 - 드롭 다운이 같은을 선택 생성?

enter image description here

답변

14

나는 이것이 좋은 생각이다 모르겠어요 : 사용자가 자신의 선택을 입력 할 수 없습니다.

이 솔루션을 테스트하지 않은,하지만 작동합니다 :

첫째, 당신이 제대로 표시 할 루트 및 LFT 값으로 세를 정렬, 그래서 쿼리 빌더 추가 할 수 있습니다

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

을 그런 다음, 당신은 당신의 엔티티에 getIndentedTitle 방법을 추가해야합니다

마지막으로
public function getIndentedTitle() { 
    return str_repeat("--", $this->lvl).$this->title; 
} 

이 옵션에 속성 옵션을 추가 가상을 표시 할 양식을 빌드 할 때 대신 제목의 특성 indentedTitle :

'property' => 'indentedTitle' 

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