Bonsoir, avis au pro de symfony2, je n'arrive pas à enregistrer correctement
une donnée déjà existant.
je vais essayer de l'expliquer car c'est pas simple et je mélange un peu les pinceaux.
voici 3 tables
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CONTACT ------------ id|nom|prenom
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 METIER ------------- id|actvite 1|plombier 2|menusier
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CONTACT-METIER --------------------- id_contact |id_activite
un contact peut posséder 1 ou plusieurs activités, c'est pour cela que j'ai
une table contact-metier
sous le répertoire entité de symfony2 j'ai donc 2 entité
entité contact
entité metier
les 2 entité on donc un relation ManyToMany
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class Contact * @ORM\ManyToMany(targetEntity="Kod\CommercialBundle\Entity\Metier",cascade={"persist"})
j'ai donc un formulaire de contact qui me permet d'ajouter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class Metier * @ORM\ManyToMany(targetEntity="Kod\AnnuaireBundle\Entity\Contact",cascade={"persist"})
plusieurs métiers.
Pour éviter des doublons dans la table métier j'ai mis une contraint unique dans le nom de l'activité.
Mon problème est que maintenant que j'ai mis cette contrainte dans mon formulaire , si j'ai un deuxième contact qui a comme activité métier plombier par exemple, le formulaire m'indique
du coup l'enregistrement de mon contact et de leurs métiers ne peuvent pas être enregistrer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 This value is already used
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public function process() { if($this->request->getMethod()=='POST') { $this->form->bindRequest($this->request); if($this->form->isValid()) { $this->onSuccess($this->form->getData());//enregistrement flush() return true; } } return false; }
si je mets une activité inconnue, ma condition if($this->form->isValide()) est
acceptée
si je mets une activité connu le plombier, ma condition if est refusé,
l'enregistrement ne se fait pas.
Pourquoi form->isValide n'est pas valide ? que faut t'il faire pour que je fasse en sorte qu'il soit valide ?
j'espère que j'ai au mieux expliquer mon problème?
voici mon formbuilder
Je vous remercie d'avance pour la réponse et de votre coup de main
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 Kod\AnnuaireBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; use Kod\CommercialBundle\Form\MetierType; class ContactType extends AbstractType { public function buildForm(FormBuilder $builder,array $options) { $builder ->add('nom') ->add('prenom') ->add('email') ->add('sexe', 'choice', array('choices' => array('F'=>'Féminin','M'=>'Masculin'))) ->add('phones','collection', array( 'type'=> new PhoneType(), 'prototype'=> true, 'allow_add'=> true)) ->add('adresses','collection', array( 'type'=> new AdresseType(), 'prototype'=> true, 'allow_add'=> true)) ->add('metiers','collection', array( 'type'=> new MetierType(), 'prototype'=> true, 'allow_add'=> true)) ; } public function getName() { return 'kod_annuaire_contacttype'; } public function getDefaultOptions(array $options) { return array( 'data_class'=>'Kod\AnnuaireBundle\Entity\Contact', ); } } ?>
Partager