7

Symfony 1には、admin_double_listという名前のフォームウィジェットがありました。「関連付けられていない」と「関連付けられている」という名前の2つの選択フィールドが生成されました。また、あるリストから別のリストにアイテムを追加するためのボタンも生成しました。

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

ドキュメントには、多対多の関係のためのウィジェットは4つしかなく、編集する関係の可能性が大量にある場合、それらのウィジェットはどれも非常に優れていません。

4

1 に答える 1

14

エンティティフォームフィールドを使用して、多対多の関係を簡単に管理できます。たとえば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',
);

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

グループの取得方法をカスタマイズする必要がある場合は、インスタンスまたはクロージャーのいずれかのオプションを渡すこともできますquery_builderQueryBuilder$erEntityRepository

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

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

より複雑なシナリオについては、コレクションフォームタイプも参照してください。ただし、jQuery/Javascriptを処理する必要があります。

于 2012-05-14T14:09:24.063 に答える