3

ユーザーを追加するフォームを作成したい:

$builder->add('firstname', 'text', array(
                    'required' => 'required'
                ))
                ->add('middlename')
                ->add('lastname')
                ->add('email', 'email')
                ->add('isActive');

しかし、私は1つのグループも追加したい. エンティティ「Group」とフォーム「GroupType」があります。しかし、すべてのグループに選択肢を追加して、1 つまたは複数を選択する方法は?

私は試した:

->add('groups', 'choice' )

しかし、このエラーが発生します:

Notice: Object of class Doctrine\Common\Collections\ArrayCollection could not be converted to int in /vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php line 457 

これを修正する方法は?

4

1 に答える 1

10

データベースのすべてのグループオブジェクトが入力された選択フィールドを作成するには、「エンティティ」フィールドを使用します。複数選択(1つ以上の選択肢)を有効にするには、「複数」オプションを使用します。例えば:

$builder->add('groups', 'entity', array(
    'class' => 'YourBundle:Group',
    'property' => 'name',
    'multiple' => true,
));

'property'オプションの値は、表示されるグループフィールドを決定します。choice要素内のオブジェクトを並べ替える必要がある場合、またはオブジェクトのサブセットを表示する必要がある場合は、「query_builder」オプションを使用して、カスタムクエリを使用して選択肢をロードします。例えば:

use Doctrine\ORM\EntityRepository;
// ...

$builder->add('groups', 'entity', array(
    'class' => 'YourBundle:Group',
    'property' => 'name',
    'multiple' => true,
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('g')
                  ->orderBy('g.name', 'ASC');
    },
));

Symfony2ドキュメントのエンティティフィールドタイプを参照してください。

于 2012-11-22T23:48:02.800 に答える