2012-02-16 7 views
5

様「木」を生成私は教義ツリー拡張 を使用して、ツリーアーキテクチャで構築されたCategoriesテーブルを持っており、それがこの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

私はこれは良いアイデアですわからない:ユーザーが自分の好みを入力することはできません。

は、このソリューションをテストしていませんが、それは動作するはずです:

まず、あなたはそれを正しく表示するため、クエリビルダを追加するには、rootとLFT値によって3を並べ替えることができます。

'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

関連する問題