Symfony2、Doctrine Extensions Tree:「ツリー」の生成 - ドロップダウンのようにリストリスト

StackOverflow https://stackoverflow.com/questions/9309959

質問

私は教義の木の拡張を使用して、ツリーアーキテクチャで構築されたカテゴリテーブルを持っています、そしてそれはこのようなものになります

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

役に立ちましたか?

解決

これが良いアイデアかどうかはわかりません。ユーザーが選択して入力することはできません。

このソリューションをテストしていませんが、機能するはずです。

まず、3つをルートで並べ替えてLFT値を適切に表示できるため、クエリビルダーを追加します。

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

次に、aを追加する必要があります getIndentedTitle エンティティへの方法:

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

最後に、フォームを構築するときにオプションにプロパティオプションを追加して、タイトルの代わりに仮想プロパティインデンテットタイトルを表示します。

'property' => 'indentedTitle'

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top