Bonjour,
J'ai mis en place un formulaire d'ajout, de modification et de suppression de données.
Selon le bouton que l'on clique l'action est différente, jusque là l'ajout de donnée dans la BDD se passe sans aucun soucis, par contre impossible de supprimer ou modifier une donnée car la méthodes set ne fonctionne pas.
la méthodes que j'utilise fonctionne si je ne passe pas par un $builder, mais là ça ne fonctionne plus et je ne comprend pas pourquoi !?
Auriez-vous une idée de comment implémenter une modification ou une suppression ?
Voici mon $builder :
Voici mon controller :
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 <?php namespace Extranet\GeneralBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class clientsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('id', 'text') ->add('code', 'hidden') ->add('compte', 'choice', array( 'choices' => array( 'CPT' => 'CPT', 'CPT/C' => 'CPT/C', 'LCR30' => 'LCR30', 'LCR30 AOC' => 'LCR30 AOC', 'LCR30L10' => 'LCR30L10', 'LCR45' => 'LCR45', 'LCR60' => 'LCR60', 'VIR30' => 'VIR30', 'VIR45' => 'VIR45', 'TR30' => 'TR30', 'TR30 AOC' => 'TR30 AOC', 'TR45' => 'TR45', 'CHQAR' => 'CHQAR', 'CH30' => 'CH30', 'CH30 AOC' => 'CH30 AOC', 'CH45' => 'CH45', 'CR' => 'CR', 'CB A LA COMMANDE' => 'CB A LA COMMANDE', 'CB FIN DE MOIS' => 'CB FIN DE MOIS', 'BAO45' => 'BAO45' ), 'required' => true, 'empty_value' => 'Type de réglement', )) ->add('nom', 'text', array( 'required' => true,)) ->add('adfac', 'text', array( 'required' => true,)) ->add('adliv', 'text', array( 'required' => false,)) ->add('tel', 'text', array( 'required' => false,)) ->add('fax', 'text', array( 'required' => false,)) ->add('mobile', 'text', array( 'required' => false,)) ->add('cp', 'text', array( 'required' => true,)) ->add('ville', 'text', array( 'required' => true,)) ->add('email', 'email', array( 'required' => false,)) ->add('blacklist', 'choice', array( 'choices' => array('ok' => 'VALIDE', 'ns' => 'NE PAS SERVIR'), 'required' => true, 'empty_value' => 'Statut du client',)) ->add('ajouter', 'submit') ->add('modifier', 'submit') ->add('supprimer', 'submit') ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Extranet\GeneralBundle\Entity\clients' )); } /** * @return string */ public function getName() { return 'extranet_generalbundle_clients'; } }
et voici ma vu :
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 public function gestionAction() { $action = new clients(); $form = $this->createForm(new clientsType(), $action); $request = $this->getRequest(); if($request->getMethod() === "POST"){ $form->submit($request); if($form->isValid()){ if(isset($_POST['add'])){ $em = $this->getDoctrine()->getManager(); $action = $form->getData(); $em->persist($action); $em->flush(); echo "<div class=\"validation\">Le client a bien été ajouté</div>"; } elseif(isset($_POST['update'])){ $id = $_POST['id']; $action = $this->getDoctrine()->getRepository('ExtranetGeneralBundle:clients')->find($id); $action->setNom($_POST['nom']) ->setAdfac($_POST['adfac']) ->setAdliv($_POST['adliv']) ->setTel($_POST['tel']) ->setFax($_POST['fax']) ->setMobile($_POST['mobile']) ->setCp($_POST['cp']) ->setVille($_POST['ville']) ->setEmail($_POST['email']) ->setCompte($_POST['compte']) ->setBlacklist($_POST['blacklist']); $this->flush(); echo "<div class=\"validation\">Le client a bien été modifié</div>"; } elseif(isset($_POST['delete'])){ $id = $_POST['id']; $action = $this->getDoctrine()->getRepository('ExtranetGeneralBundle:clients')->find($id); $this->remove($action); $this->flush(); echo "<div class=\"validation\">Le client a bien été supprimé</div>"; } else echo "<div class=\"erreur\">Veillez à bien renseigner les champs avant d'ajouter, modifier ou supprimer un client !</div>"; } } return $this->render('ExtranetGeneralBundle:Default:gestion.html.twig', array( 'form' => $form->createView(), )); }
L'erreur principale est la suivante :
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
88
89
90
91 <form class="form-horizontal" method="post"> {{ form_widget(form.code, {'attr': {'class': 'form-control', 'value': 'CLIENT'}}) }} <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-user"></i></label> <div class="col-sm-11"> {{ form_widget(form.nom, {'attr': {'class': 'form-control', 'placeholder': 'Raison sociale', 'autofocus': 'true'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-barcode"></i></label> <div class="col-sm-11"> {{ form_widget(form.id, {'attr': {'class': 'form-control', 'placeholder': 'Code client', 'readonly': 'true'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-map-marker"></i></label> <div class="col-sm-11"> {{ form_widget(form.adfac, {'attr': {'class': 'form-control', 'placeholder': 'Adresse de facturation'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-map-marker"></i></label> <div class="col-sm-11"> {{ form_widget(form.adliv, {'attr': {'class': 'form-control', 'placeholder': 'Adresse de livraison'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-map-marker"></i></label> <div class="col-sm-11"> <div class="col-xs-4"> {{ form_widget(form.cp, {'attr': {'class': 'form-control', 'placeholder': 'Code postal'}}) }} </div> <div class="col-xs-8"> {{ form_widget(form.ville, {'attr': {'class': 'form-control', 'placeholder': 'Ville'}}) }} </div> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-phone"></i></label> <div class="col-sm-3"> {{ form_widget(form.tel, {'attr': {'class': 'form-control', 'placeholder': 'N°Tél'}}) }} </div> <label class="col-sm-1 control-label"><i class="fa fa-mobile"></i></label> <div class="col-sm-3"> {{ form_widget(form.mobile, {'attr': {'class': 'form-control', 'placeholder': 'N°Mobile'}}) }} </div> <label class="col-sm-1 control-label"><i class="fa fa-fax"></i></label> <div class="col-sm-3"> {{ form_widget(form.fax, {'attr': {'class': 'form-control', 'placeholder': 'N°Fax'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-envelope-o"></i></label> <div class="col-sm-11"> {{ form_widget(form.email, {'attr': {'class': 'form-control', 'placeholder': 'Email'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-1 control-label"><i class="fa fa-eur"></i></label> <div class="col-sm-5"> {{ form_widget(form.compte, {'attr': {'class': 'form-control'}}) }} </div> <label class="col-sm-1 control-label"><i class="fa fa-check"></i></label> <div class="col-sm-5"> {{ form_widget(form.blacklist, {'attr': {'class': 'form-control', 'empty_value': 'Statut du client'}}) }} </div> </div> <div class="form-group"> <div class="col-sm-3"> </div> <div class="col-sm-3"> <input class="btn btn-default" type="submit" id="delete" name="delete" value="Supprimer le client" /> </div> <div class="col-sm-3"> <input style="margin-left:5px;" class="btn btn-default" type="submit" id="update" name="update" value="Modifier le client" /> </div> <div class="col-sm-3"> <input style="margin-left:5px;" class="btn btn-default" type="submit" id="add" name="add" value="Ajouter le client" /> </div> </div> {{ form_widget(form._token) }} </form>
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part Neither the property "id" nor one of the methods "addId()"/"removeId()", "setId()", "id()", "__set()" or "__call()" exist and have public access in class "Extranet\GeneralBundle\Entity\clients".
Edit : Le bouton "Ajouter" fonctionne très bien, mais j'ai remarqué qu'il provoque cette erreur lorsqu'il y a une valeur dans le champs "id" que j'appui sur le bouton ajouter ou modifier l'erreur est la même...
Partager