Bonjour,

Voici la situation: J'ai deux entité Group et User. J'ai créé une relation ManyToMany avec attributs, i.e. une troisième entité UserGroup qui matérialise la relation. Voici mon entité ci-dessous:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
namespace Me\UserBundle\Entity;
 
use Doctrine\ORM\Mapping as ORM;
 
class UserGroup
{
 
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Me\UserBundle\Entity\User")
     */
    private $user;
 
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Me\UserBundle\Entity\Group")
     */
    private $group;
 
    protected $adminstatus;
 
    protected $status;
 
    protected $fanstatus;
 
    public function __construct() 
	{
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();
        $this->team = new \Doctrine\Common\Collections\ArrayCollection();
	}
}
Je veux créé un formulaire permettant de choisir les membres du groupe parmi tous les utilisateurs du site. Voici mon code, le type, le handler et les lignes du Controller qui nous intéressent.

le type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
<?php
namespace Me\UserBundle\Form\Type;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
 
class PickUserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
	    $builder
			->add('user', 'entity', array(
				'label' => 'Pick your members :',
				'property' => 'username',
				'class' => 'MeUserBundle:User', 
				'multiple' => 'true',
				'query_builder' => function(\Me\UserBundle\Entity\UserRepository                    $er) { 
				return $er->createQueryBuilder('u')
						->orderBy('u.username', 'ASC');
    },
			));
	}
 
    public function getName()
    {
        return 'me_userbundle_pickusertype';
    }
 
    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Me\UserBundle\Entity\UserGroup',
        );
    }
}
le handler:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
<?php
namespace Me\SportBundle\Form\Handler;
 
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;
use Me\UserBundle\Entity\UserGroup;
 
class PickUserHandler
{
    protected $form;
    protected $request;
    protected $em;
 
    public function __construct(Form $form, Request $request, EntityManager $em)
    {
        $this->form    = $form;
        $this->request = $request;
        $this->em      = $em;
    }
 
    public function process()
    {
        if( $this->request->getMethod() == 'POST' )
        {
            $this->form->bindRequest($this->request);
 
            if( $this->form->isValid() )
            {
                $this->onSuccess($this->form->getData());
 
                return true;
            }
        }
 
        return false;
    }
 
    public function onSuccess($usergrouplist)
    {
		foreach ($usergrouplist as $usergroup)
		{
			$this->em->persist($usergroup);
		}
        $this->em->flush();
    }
}
Et dans mon Controller j'ai mis ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<?php
$Repository = $em->getRepository('MeUserBundle:UserGroup');
$usergrouplist = $Repository->findBy(array('group' => $group->getId()));
 
$form = $this->createForm(new PickUserType, $usergrouplist);
$formHandler = new PickUserHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
Le formulaire s'affiche bien, j'ai ma liste d'utilisateurs mais quand je valide j'ai cette erreur:
"Class Doctrine\Common\Collections\ArrayCollection is not a valid entity or mapped super class."

Je ne vois pas trop comment lui dire qu'on crée une relation pour chaque User sélectionné. Et ça me parait étrange de mettre 'data_class' => 'Me\UserBundle\Entity\UserGroup' car c'est plutôt un array de UserGroup que j'ai, non?

Merci pour votre aide!

PS une question indépendante, j'ai un autre formulaire "création d'un groupe" et je voulais que les 2 formulaires, création d'un groupe et choix des membres soient sur la même page mais je n'ai pas réussi à valider 2 formulaires avec un seul bouton. C'est possible, de valider 2 formulaires avec un seul bouton?