Bonjour,
Je suis débutant en symfony et donc j'ai décidé de commencer par symfony 2.0, je suis en train de créer une application d'essais pour voir comment le framework fonctionne et je rencontre une erreur dont je n'ai pas trouvé la solution sur les forums, je viens donc vous poser une petite question.
J'ai une entité Utilisateurs (avec FOSUserBundle) et une entité Appartements. Les appartements appartiennent aux utilisateurs qui peuvent en avoir un ou +.
Voici le code des entités :
Utilisateurs :
et Appartements
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 <?php namespace MyApp\UtilisateursBundle\Entity; use FOS\UserBundle\Entity\User as BaseUser; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity */ class Utilisateurs extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\generatedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type= "string", length= "100") * @Assert\NotBlank() * @Assert\MinLength(3) * @Assert\MaxLength(100) */ private $nom; /** * @ORM\OnetoMany (targetEntity= "MyApp\UtilisateursBundle\Entity\Utilisateurs", mappedBy="utilisateurs") */ protected $appartements; public function __construct() { parent::__construct(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nom * * @param string $nom */ public function setNom($nom) { $this->nom = $nom; } /** * Get nom * * @return string */ public function getNom() { return $this->nom; } /** * Add appartements * * @param MyApp\UtilisateursBundle\Entity\Utilisateurs $appartements */ public function addUtilisateurs(\MyApp\UtilisateursBundle\Entity\Utilisateurs $appartements) { $this->appartements[] = $appartements; } /** * Get appartements * * @return Doctrine\Common\Collections\Collection */ public function getAppartements() { return $this->appartements; } }
J'ai ensuite un formulaire pour l'ajout d'appartement
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
49
50 <?php namespace MyApp\AppartementsBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity */ class Appartements { /** * @ORM\GeneratedValue * @ORM\Id * @ORM\Column(type= "integer") */ private $id; /** * @ORM\Column(type= "string", length= "100") * @Assert\NotBlank() * @Assert\MinLength(3) * @Assert\MaxLength(100) */ private $titre; /** * @ORM\ManytoOne (targetEntity= "MyApp\UtilisateursBundle\Entity\Utilisateurs", inversedBy="appartements") */ protected $utilisateurs; /** * Set Utilisateurs * * @param MyApp\UtilisateursBundle\Entity\Utilisateurs $utilisateurs */ public function setUtilisateurs(\MyApp\UtilisateursBundle\Entity\Utilisateurs $utilisateurs) { $this->Utilisateurs = $utilisateurs; } /** * Get Utilisateurs * * @return MyApp\UtilisateursBundle\Entity\Utilisateurs */ public function getUtilisateurs() { return $this->Utilisateurs; }
Je ne vous ai pas tout mis pour plus de clarté mais le reste est ok
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 namespace MyApp\AppartementsBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class AppartementsForm extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder ->add('titre', 'text') } }
Puis j'ai mon controller pour l'action d'ajout :
J'ai un problème avec tout cela qui est le suivant :
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 public function ajouterAction() { $appartements = new Appartements(); $form = $this->container->get('form.factory')->create(new AppartementsForm(), $appartements); $request = $this->container->get('request'); if ($request->getMethod() == 'POST') { $form->bindRequest($request); if ($form->isValid()) { $user = $this->get('security.context')->getToken()->getUser(); $appartements->setUtilisateurs($user); $em = $this->container->get('doctrine')->getEntityManager(); $em->persist($appartements); $em->flush(); $message='Votre appartement a été ajouté avec succès !'; // redirection vers les autres options du formulaire et récupération de l'id } } return $this->container->get('templating')->renderResponse('MyAppAppartementsBundle:Membres:ajouter.html.twig', array( 'form' => $form->createView(), 'message' => '' )); }
lors de l'insertion en base de données, le champs Utilisateurs_id qui a été créé par doctrine lors de la création de la base reste null.
Si je change la ligne
en mettant l'id ->getId() pour ne donner que le numéro le système me dit qui lui faut une instance de MyApp\UtilisateursBundle\Entity\Utilisateurs ce qu'il a avec la version actuelle mais le champs reste null quoi qu'il arrive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $user = $this->get('security.context')->getToken()->getUser(); $appartements->setUtilisateurs($user);
J'ai donc essayé en ajoutant le champs utilisateurs dans le formulaire, il me met alors une liste déroulante des différents utilisateurs et même en sélectionnant un utilisateur, le champs reste à null lors de l'enregistrement.
En gros, comment accroché mon appartement à un utilisateur...
Est-ce que vous avez une idée ou une piste ?
Merci d'avance,
Thibault
Partager