Symfony2、Doctrine Extensions Tree:「ツリー」の生成 - ドロップダウンのようにリストリスト
-
26-10-2019 - |
質問
私は教義の木の拡張を使用して、ツリーアーキテクチャで構築されたカテゴリテーブルを持っています、そしてそれはこのようなものになります
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', ));
}
このような通常のドロップダウンメニューが生成されます。
メニュー設定を構成するにはどうすればよいですか。 ツリーのようなドロップダウン選択 このような?
解決
これが良いアイデアかどうかはわかりません。ユーザーが選択して入力することはできません。
このソリューションをテストしていませんが、機能するはずです。
まず、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
所属していません StackOverflow