IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Symfony 2] Formulaire à plusieurs boutons [Ajout, Modification et Suppression de données] [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet multimédia
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet multimédia
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Par défaut [Symfony 2] Formulaire à plusieurs boutons [Ajout, Modification et Suppression de données]
    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 :

    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';
        }
    }
    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
    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(),
                ));
        }
    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
    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>
    L'erreur principale est la suivante :

    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".
    Merci

    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...

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet multimédia
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet multimédia
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Par défaut
    Up, please !

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet multimédia
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet multimédia
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Par défaut
    Bon après un bon week-end de repos, je trouve enfin la solution à mon problème.

    Je poste le résultat ici, ne sait-on jamais si quelqu'un rencontre le même problème que moi ça lui évitera de passer 4 jours dessus :

    pour le moment je n'ai fais que l'ajout et la modification (du nom) mais la suppression ne devrait pas poser de problème, 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
    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'])){
                            $em = $this->getDoctrine()->getManager();
                            $id = $form->getData()->getId();
                            $nom = $form->getData()->getNom(); 
     
     
                            $product = $em->getRepository('ExtranetGeneralBundle:clients')->find($id);
     
                            if (!$product) {
                                throw $this->createNotFoundException(
                                    'Aucun produit trouvé pour cet id : '.$id
                                );
                            }
     
                            $product->setNom($nom);
                            $em->flush();
     
                        echo "<div class=\"validation\">Le client a bien été modifié</div>";
                        }
     
                        elseif(isset($_POST['delete'])){
     
     
                        echo "<div class=\"validation\">Le client a bien été ajouté</div>";
                        }
     
                    else echo "<div class=\"erreur\">Veillez à bien renseigner les champs avant d'ajouter un client !</div>";
                } 
     
            }
     
        	return $this->render('ExtranetGeneralBundle:Default:gestionclient.html.twig', array(
                'form' => $form->createView(),
                ));
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/10/2012, 05h16
  2. Un formulaire - plusieurs boutons - plusieurs cibles
    Par balbitus dans le forum Langage
    Réponses: 13
    Dernier message: 13/01/2011, 17h37
  3. ajout, modification et suppression avec instructions sql
    Par lucaazori1988 dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/08/2010, 11h03
  4. Réponses: 5
    Dernier message: 25/02/2008, 17h58
  5. formulaire à plusieurs boutons
    Par sissi25 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 25/07/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo