2012-05-14 11 views
7

Symfony 1では、admin_double_listという名前のフォームウィジェットがありました。 Unassociated and Associatedという2つの選択フィールドが生成されました。あるリストから別のリストにアイテムを追加するためのボタンも生成されました。多対多関係のSymfony2フォームウィジェット

Symfony2でこれを達成する簡単な方法はありますか?多対多の関係を編集するためのユーザーフレンドリーな方法ですか?

documentationには多対多リレーションシップのウィジェットが4つしかなく、編集するリレーションの可能性が大量にある場合は非常に素晴らしいものはありません。

答えて

14

entity form fieldで多対多リレーションシップを簡単に管理できます。例えばUser場合Groupと多対多の関係のように、あなたは単にビルダーに追加することができます。

$builder->add('groups', 'entity', array(
    'multiple' => true, // Multiple selection allowed 
    'expanded' => true, // Render as checkboxes 
    'property' => 'name', // Assuming that the entity has a "name" property 
    'class' => 'Acme\HelloBundle\Entity\Group', 
); 

これは、関連するエンティティが関連付けられていないながらでないとマーク(チェック)されているチェックボックスのリストを生成します。 expandedfalseに設定すると、それを選択要素(複数)としてレンダリングできます。

あなたはグループが取得される方法をカスタマイズする必要がある場合もquery_builderオプションを渡すことができ、$erは、より複雑なシナリオではEntityRepository

'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
    $qb = $er->createQueryBuilder('g'); 

    return $qb->orderBy('g.name', 'DESC); 
} 

のいずれかQueryBuilderインスタンスまたは閉鎖はcollection form typeでも見て、しかし、あなたはjQuery/Javascriptを扱わなければなりません。

+0

ここで問題となるのは、編集ページが使用可能で使いやすいチェックボックスが多すぎるということです。そのため、私はSymfony1のようなものを探していました。 – teemup

+0

それは今のところ私にとってはうまくいくでしょう。私は、ユーザーが希望するすべての関連付けを選択するまで、「別のものを追加」して別の単一の選択肢を得ることができるように、「ajax」する方法を見つけることを望んでいました。 –

+0

例:MTMフィールドの表示方法を変更するには、exampe - デフォルト列ではなく、チェックボックスの行にエンティティIDを表示しますか? – olga