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 :

[Form] Ajout dans une collection [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 25
    Points : 23
    Points
    23
    Par défaut [Form] Ajout dans une collection
    Bonjour,

    Dans un formulaire j'ai un collection d'entitées, j'ai donc ajouter le champs collection comme il faut

    Quand je vais sur mon formulaire et que j'ajoute un item et que j'enregistre ça le sauvegarde bien

    Sauf que si j'en rajoute plus d'un lors je l'enregistrement j'ai une erreur sur la requête qui a NULL dans le champs de référence.

    Je pense que mon problème peut venir du JS :
    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
     
    <script type="text/javascript">
    $(document).ready(function() {
      // On récupère la balise <div> en question qui contient l'attribut « data-prototype » qui nous intéresse.
      var $container = $('div#egs_userbundle_contacttype_Datas');
     
      // On ajoute un lien pour ajouter une nouvelle catégorie
      var $lienAjout = $('<a href="#" id="ajout_data" class="btn">Ajouter une donnée</a>');
      $container.append($lienAjout);
     
      // On ajoute un nouveau champ à chaque clic sur le lien d'ajout.
      $lienAjout.click(function(e) {
        ajouterData($container);
        e.preventDefault(); // évite qu'un # apparaisse dans l'URL
        return false;
      });
     
      // On définit un compteur unique pour nommer les champs qu'on va ajouter dynamiquement
      var index = $container.find('input[id$="contenu"]').length;
      // On ajoute un premier champ directement s'il n'en existe pas déjà un (cas d'un nouvel article par exemple).
      if (index == 0) {
        ajouterData($container);
      } else {
        // Pour chaque catégorie déjà existante, on ajoute un lien de suppression
        $container.children('div').each(function() {
          ajouterLienSuppression($(this));
        });
      }
     
      // La fonction qui ajoute un formulaire
      function ajouterData($container) {
     
        // Dans le contenu de l'attribut « data-prototype », on remplace :
        // - le texte "__name__label__" qu'il contient par le label du champ
        // - le texte "__name__" qu'il contient par le numéro du champ
        var $prototype = $($container.attr('data-prototype').replace(/__name__label__/g, 'Donnée n°' + index)
                                                            .replace(/__name__/g, index));
     
        // On ajoute au prototype un lien pour pouvoir supprimer la catégorie
        ajouterLienSuppression($prototype);
     
        // On ajoute le prototype modifié à la fin de la balise <div>
        $container.append($prototype);
     
        // Enfin, on incrémente le compteur pour que le prochain ajout se fasse avec un autre numéro
        index++;
      }
     
      // La fonction qui ajoute un lien de suppression d'une catégorie
      function ajouterLienSuppression($prototype) {
        // Création du lien
        $lienSuppression = $('<a href="#" class="btn btn-danger">Supprimer</a>');
     
        // Ajout du lien
        $prototype.append($lienSuppression);
     
        // Ajout du listener sur le clic du lien
        $lienSuppression.click(function(e) {
          $prototype.remove();
          e.preventDefault(); // évite qu'un # apparaisse dans l'URL
          return false;
        });
      }
    });
    </script>
    Ou de 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
     
       public function updateAction(Request $request, $id)
        {
    $this->get('session')->getFlashBag()->add('info', 'Contact updateAction');
            $em = $this->getDoctrine()->getManager();
            $contact = $em->getRepository('EgsUserBundle:Contact')->find($id);
     
            if (!$contact) {
                throw $this->createNotFoundException('Unable to find Contact entity.');
            }
     
            $contact_data = new ContactData();
            $contact->addDatas($contact_data);  
            $contact_data->setContact($contact);
     
            $deleteForm = $this->createDeleteForm($id);
     
            $editForm = $this->createForm(new ContactType(), $contact);
     
     
            $editForm->bind($request);
     
            if ($editForm->isValid()) {
                $em->persist($contact);
     
                $em->flush();
                $this->get('session')->getFlashBag()->add('info', 'Contact updateAction -> flush');
                return $this->redirect($this->generateUrl('contact_edit', array('id' => $id)));
            }
     
    $this->get('session')->getFlashBag()->add('err', 'Contact updateAction -> non valid');  
            return $this->render('EgsUserBundle:Contact:edit.html.twig', array(
                'entity'      => $contact,
                'edit_form'   => $editForm->createView(),
                'delete_form' => $deleteForm->createView(),
            ));
        }
    Quand j'ajoute qu'une donnée ça marche dès que j'en mets plusieurs ça plante ma requête

    J'ai aussi un autre problème, lors de l’appuie sur le bouton supprimer, ça me supprime bien la donnée de la page, mais quand je valide le formulaire et que je reviens sur la page, la donnée n'a pas était supprimée ... Ces deux problèmes sont peut être liés ...


    Merci par avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Points : 183
    Points
    183
    Par défaut
    Salut,

    Tu t'es inspiré de la doc ?

    http://symfony.com/doc/2.0/cookbook/...-new-prototype

    Que représente new ContactData() ?
    C'est une entité ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    J'ai trouvé mon problème ^^

    J'avais un addDatas() qui trainé dans mon entitée ... je l'ai supprimé et ça marche, seul le setDatas() est nécessaire

    Merci pour la piste de recherche

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

Discussions similaires

  1. [DEBUTANT] - Pb pour ajout dans une collection
    Par bdaboah dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/12/2009, 15h26
  2. Réponses: 3
    Dernier message: 25/04/2009, 15h34
  3. ajout d'un nouvel élément dans une collection
    Par sasuma dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/05/2008, 18h15
  4. Méthode non acceptée : ajout d'un objet dans une collection
    Par Nzs26 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2007, 19h31
  5. Ajouter un Form HTML dans une WEBFORM
    Par Sophie84 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2007, 15h47

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