2017-09-18 4 views
-3

ユーザーは、ajaxを使ってポップアップでフォームを使ってプロジェクトを作成することができます。彼らはChromeを使ってツールにアクセスします。Symfonyフォームは重複した古いデータを保存する

問題は、彼らが新しいプロジェクトを作成するときに、いくつかの時間は、フォームが元のプロジェクトの情報が保存されますので、彼らは新しいプロジェクトのデータを失うことです。

誰かがすでにこの問題を持って、それを修正する方法を知っていますか?ブラウザのキャッシュに問題はありますか?

ありがとうございました!

EDITこれは、あなたの質問は非常に質の悪いです私のコード

小枝ビュー

<!-- Formulaire de création d'un nouveau projet --> 
{{ form_start(form, { 'attr': {'class': 'form-horizontal'} }) }} 
{{ form_start(formGroupe, { 'attr': {'class': 'form-horizontal'} }) }} 

<div class="row"> 
    <div class="col-sm-offset-1 sous-titre-cartouche cartouche-1"> 
     <p>Le groupe de projets</p> 
     <hr> 
    </div> 
</div> 

<br> 

<!-- Choix du groupe --> 
<div class="row"> 
    <div class="col-sm-offset-1"> 
     <label for="choixGroupe"><img src="{{ asset('picto/commercial/1-1.png') }}" class="picto-number"> Ce projet fait-il partie d'un groupe de projets ? <span class="required">*</span></label> 

     <input type="radio" name="choixGroupe" id="radioOui" value="1" {% if projet is defined and projet.groupe != null %}checked{% endif %}> 
     <label for="radioOui" class="required">Oui</label> 

     <input type="radio" name="choixGroupe" id="radioNon" value="0" {% if projet is not defined or (projet is defined and projet.groupe == null) %}checked{% endif %}> 
     <label for="radioNon" class="required">Non</label> 
    </div> 
</div> 

<br> 

<!-- Choix du groupe2 --> 
<div class="row group-choixGroupe2"> 
    <div class="col-sm-offset-1"> 
     <label for="choixGroupe2"><img src="{{ asset('picto/commercial/1-2.png') }}" class="picto-number"> Voulez-vous choisir un groupe de projets déjà existant ? <span class="required">*</span></label> 

     <input type="radio" name="choixGroupe2" id="radioOui2" value="1" {% if choixGroupe is defined and choixGroupe == '1' %}checked{% endif %}> 
     <label for="radioOui2" class="required">Oui</label> 

     <input type="radio" name="choixGroupe2" id="radioNon2" value="0" {% if choixGroupe is defined and choixGroupe == '0' %}checked{% endif %}> 
     <label for="radioNon2" class="required">Non</label> 
    </div> 
</div> 

<br class="group-existant"> 

<!-- Groupe existant --> 
<div class="row group-existant"> 
    <div class="col-sm-offset-1"> 
     <label for="groupeExistant"><img src="{{ asset('picto/commercial/1-3.png') }}" class="picto-number"> Sélectionner le groupe de projets existant : <span class="required">*</span></label> 
     {{ form_widget(formGroupe.groupeExistant) }} 
    </div> 
</div> 

<br class="group-nouveau"> 

<!-- Nouveau groupe --> 
<div class="row group-nouveau"> 
    <div class="col-sm-offset-1"> 
     <label for="groupeNom"><img src="{{ asset('picto/commercial/1-3.png') }}" class="picto-number"> Créer un nouveau groupe de projets : <span class="required">*</span></label> 
     {{ form_widget(formGroupe.objet, { 'attr': {'placeholder': 'Champ à définir'} }) }} 
    </div> 
</div> 

<br> 

<!-- Groupe description --> 
<div class="row group-description"> 
    <div class="col-sm-offset-1"> 
     <label for="groupeDescription"><img src="{{ asset('picto/commercial/1-4.png') }}" class="picto-number"> Description du groupe de projets : <span class="required">*</span></label> 
     <br> 
     <br> 
     <textarea name="groupeDescription" class="description">{% if projet is defined and projet.groupe != null %}{{ projet.groupe.description }}{% endif %}</textarea> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <div class="col-sm-offset-1 sous-titre-cartouche cartouche-2"> 
     <p>Le client</p> 
     <hr> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <div class="col-sm-offset-1"> 
     <label for="groupe_client"><img src="{{ asset('picto/commercial/2-1.png') }}" class="picto-number"> Sélectionner les champs suivants : <span class="required">*</span></label> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <!-- Groupe --> 
    <div class="col-sm-offset-1 projet-client"> 
     {{ form_widget(form.client, { 'attr': {'class': 'col-sm-2'} }) }} 
     <input type="hidden" name="creationProjet[client]" id="hiddenClient" disabled> 
    </div> 

    <!-- Filiale --> 
    <div class="projet-filiale"> 
     {{ form_widget(form.filiale, { 'attr': {'class': 'col-sm-offset-1 col-sm-2'} }) }} 
     <input type="hidden" name="creationProjet[filiale]" id="hiddenFiliale" disabled> 
    </div> 

    <!-- Contact --> 
    <div class="projet-contact"> 
     {{ form_widget(form.contact, { 'attr': {'class': 'col-sm-offset-1 col-sm-2'} }) }} 
     <input type="hidden" name="creationProjet[contact]" id="hiddenContact" disabled> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <div class="col-sm-offset-1 sous-titre-cartouche cartouche-3"> 
     <p>Le projet</p> 
     <hr> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <!-- Expertise --> 
    <div class="col-sm-offset-1 col-sm-5 col-expertise"> 
     <label for="expertise"><img src="{{ asset('picto/commercial/3-1.png') }}" class="picto-number"> Sélectionner le type d'expertise : <span class="required">*</span></label> 
     <br> 
     <br> 
     {{ form_widget(form.expertise, { 'attr': {'class': 'col-sm-5'} }) }} 
    </div> 

    <!-- Objet --> 
    <div class="col-sm-5"> 
     <label for="objet"><img src="{{ asset('picto/commercial/3-4.png') }}" class="picto-number"> Remplir l'intitulé et la description du projet : <span class="required">*</span></label> 
     <br> 
     <br> 
     {{ form_widget(form.objet, { 'attr': {'placeholder': 'Champ à remplir' , 'class': 'col-sm-11'} }) }} 
    </div> 
</div> 

<br> 

<div class="row"> 

    <div class="col-sm-offset-1 col-sm-5"> 
     <!-- Impression --> 
     <div class="row group-impression"> 
      <label for="impression"><img src="{{ asset('picto/commercial/3-2.png') }}" class="picto-number"> Ce projet est-il imprimé ? <span class="required">*</span> </label> 
      {{ form_widget(form.impression) }} 
     </div> 

     <br> 

     <div class="row datesProjet"> 
      <label for="dates"><img src="{{ asset('picto/commercial/3-3.png') }}" class="picto-number"> Choisir les dates de début et de fin : <span class="required">*</span> </label> 
      <br> 
      <br> 

      <!-- Date de début --> 
      <div class="col-sm-6 group-dateDebut"> 
       <label for="dateDebut">Date de début : </label> 
       {{ form_widget(form.dateDebut) }} 
      </div> 

      <!-- Date de fin --> 
      <div class="col-sm-6 group-dateFin"> 
       <label for="dateFin">Date de fin : <span class="required">*</span></label> 
       {{ form_widget(form.dateFin) }} 
      </div> 
     </div> 

     <br> 

     <div class="row datesImpression"> 
      <!-- Date de mise en impression --> 
      <div class="col-sm-6"> 
       <label for="dateImpression">Date de mise en impression : </label> 
       {{ form_widget(form.dateImpression) }} 
      </div> 
     </div> 
    </div> 

    <!-- Description --> 
    <div class="col-sm-5"> 
     <textarea name="projetDescription" class="description">{% if projet is defined %}{{ projet.description }}{% endif %}</textarea> 
    </div> 

</div> 

<br> 

<!-- Message d'erreur --> 
<div class="row"> 
    <div class="col-sm-offset-1 col-sm-10"> 
     <span class="error date-erreur"></span> 
    </div> 
</div> 

<br> 

<div class="row"> 
    <div class="col-sm-offset-1 col-sm-10 hr-footer"> 
     <hr> 
    </div> 
</div> 

<br> 

<!-- Bouton Enregistrer ou Modifier --> 
<div class="row"> 
    <div class="col-sm-offset-8 col-sm-1"> 
     <span class="glyphicon glyphicon-repeat spinner noactive"></span> 
    </div> 
    <div class="col-sm-2"> 
     {{ form_widget(form._token) }} 
     {{ form_widget(formGroupe._token) }} 
     {% if projet is defined %} 
      <input type="submit" class="modifier-submit"> 
     {% else %} 
      <input type="submit" class="creer-submit cursor"> 
     {% endif %} 
    </div> 
</div> 

{{ form_end(formGroupe) }} 
{{ form_end(form) }} 

コントローラ

/** 
* Action pour le formulaire de création d'un projet 
*/ 
public function indexAction() 
{ 
    $request = $this->getRequest(); 

    $em = $this->getDoctrine()->getManager(); 

    /* On crée un nouveau projet */ 
    $projet = new Projet(); 

    /* On crée un nouveau groupe */ 
    $groupe = new Groupe(); 

    /* On récupère le formulaire */ 
    $form = $this->createForm(new CreationProjetType($this->getDoctrine()->getManager()), $projet); 
    $formGroupe = $this->createForm(new CreationGroupeType());   

    /* On redirige vers le formulaire de création du projet */ 
    return $this->render('CommercialBundle:CreationProjet:index.html.twig', 
     array('utilisateur' => $this->getUser() , 
       'form' => $form->createView() , 
       'formGroupe' => $formGroupe->createView())); 
} 


/** 
* Action pour la création d'un projet + Modification d'un projet 
*/ 
public function creerAjaxAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $manager = new Manager($em); 

    /* On crée un nouveau projet */ 
    $projet = new Projet(); 

    /* On crée un nouveau groupe */ 
    $groupe = new Groupe(); 

    /* On récupère le groupe du projet */ 
    $choixGroupe = $request->request->get('choixGroupe'); 
    $choixGroupe2 = $request->request->get('choixGroupe2'); 
    $groupeDescription = $request->request->get('groupeDescription');   

    /* On récupère les formulaires */ 
    $form = $this->createForm(new CreationProjetType($this->getDoctrine()->getManager()), $projet); 
    $formGroupe = $this->createForm(new CreationGroupeType()); 


    if($request->isXmlHttpRequest()) { 
     $form->bind($request); 
     $formGroupe->bind($request); 

     if($form->isValid()) { 
      /* On récupère les données du formulaire */ 
      $dataProjet = $this->getRequest()->request->get('creationProjet'); 
      $dataGroupe = $this->getRequest()->request->get('creationGroupe'); 


      /* On enregistre l'objet */ 
      $projet->setObjet($manager->pregSlash($dataProjet['objet'])); 


      /* On enregistre l'expertise */ 
      $expertise = new Expertise(); 
      $expertise = $em->getRepository('CommercialBundle:Expertise')->find($dataProjet['expertise']); 
      $projet->setExpertise($expertise); 


      /* On enregistre la description */ 
      $projet->setDescription($request->request->get('projetDescription')); 


      /* On enregistre la date de création */ 
      $projet->setDateCreation(new \DateTime(date('Y-m-d'))); 


      /* On enregistre l'état du projet */ 
      $etat = new Etat(); 
      $etat = $em->getRepository('CommercialBundle:Etat')->find(10); 
      $projet->setEtat($etat); 


      /* On enregistre le chef de projet */ 
      $user = new Utilisateur(); 
      $user = $em->getRepository('UtilisateurBundle:Utilisateur')->find($this->getUser()); 
      $projet->setCreateur($user); 


      /* Si le nouveau projet ne fait pas parti d'un groupe */ 
      if($choixGroupe == '0') { 
       /* On enregistre le contact */ 
       $contact = new Contact(); 
       $contact = $em->getRepository('ClientBundle:Contact')->find($dataProjet['contact']); 
       $projet->setContact($contact); 


       /* On enregistre la filiale */ 
       $filiale = new Filiale(); 
       $filiale = $em->getRepository('ClientBundle:Filiale')->find($dataProjet['filiale']); 
       $projet->setFiliale($filiale); 


       /* On récupère le dernier projet créé */ 
       $projetLast = $em->getRepository('CommercialBundle:Projet')->findOneBy(array(), array('numeroDossier' => 'DESC')); 
       /* S'il a au moins un projet créé */ 
       if($projetLast != null) { 
        /* On incrémente le numéro de dossier de dernier projet créé */ 
        $numeroDossier = $projetLast->getNumeroDossier() + 1; 
        if($numeroDossier < 10) 
         $numeroDossier = '00'.$numeroDossier; 
        else 
         $numeroDossier = '0'.$numeroDossier; 
        /* On enregistre le numéro de dossier */ 
        $projet->setNumeroDossier($numeroDossier); 
       } 
       else { 
        /* On enregistre le numéro de dossier à 1 */ 
        $projet->setNumeroDossier('001'); 
       } 

      } 
      /* Si le nouveau projet fait parti d'un groupe de projets */ 
      else { 
       /* Si le projet fait partie d'un nouveau groupe */ 
       if($choixGroupe2 == '0') { 
        /* On enregistre le contact */ 
        $contact = new Contact(); 
        $contact = $em->getRepository('ClientBundle:Contact')->find($dataProjet['contact']); 
        $projet->setContact($contact); 


        /* On enregistre la filiale */ 
        $filiale = new Filiale(); 
        $filiale = $em->getRepository('ClientBundle:Filiale')->find($dataProjet['filiale']); 
        $projet->setFiliale($filiale); 


        /* On enregistre l'état */ 
        $groupe->setEtat('1'); 


        /* On enregistre l'objet */ 
        $groupe->setObjet($manager->pregSlash($dataGroupe['objet'])); 


        /* On enregistre la description */ 
        $groupe->setDescription($groupeDescription); 


        /* On enregistre le contact */ 
        $groupe->setContact($contact); 


        /* On enregistre la filiale */ 
        $groupe->setFiliale($filiale); 


        /* On enregistre la date de création */ 
        $groupe->setDateCreation(new \DateTime(date('Y-m-d'))); 


        /* On récupère le dernier projet créé */ 
        $projetLast = $em->getRepository('CommercialBundle:Projet')->findOneBy(array(), array('numeroDossier' => 'DESC')); 

        /* S'il a au moins un projet créé */ 
        if($projetLast != null) { 
         /* On incrémente le numéro de dossier de dernier projet créé */ 
         $numeroDossier = $projetLast->getNumeroDossier() + 1; 
         if($numeroDossier < 10) 
          $numeroDossier = '00'.$numeroDossier; 
         else 
          $numeroDossier = '0'.$numeroDossier; 
        } 
        else { 
         $numeroDossier = '001'; 
        } 


        /* On enregistre le numéro de dossier du groupe */ 
        $groupe->setNumeroDossier($numeroDossier); 


        /* On enregistre le numéro de dossier du projet */ 
        $projet->setNumeroDossier($numeroDossier); 
        $projet->setNumeroProjet('001'); 


        /* On enregistre le groupe */ 
        $projet->setGroupe($groupe); 


        $em->persist($groupe);       
       } 
       /* Si le projet fait partie d'un groupe de projets déjà existant */ 
       else { 
        /* On récupère le groupe */ 
        $groupe = $em->getRepository('CommercialBundle:Groupe')->find($dataGroupe['groupeExistant']); 


        /* On enregistre le contact */ 
        $contact = new Contact(); 
        $contact = $em->getRepository('ClientBundle:Contact')->find($groupe->getContact()->getId()); 
        $projet->setContact($contact); 


        /* On enregistre la filiale */ 
        $filiale = new Filiale(); 
        $filiale = $em->getRepository('ClientBundle:Filiale')->find($groupe->getFiliale()->getId()); 
        $projet->setFiliale($filiale); 


        /* On enregistre le numéro de dossier du projet */ 
        $projet->setNumeroDossier($groupe->getNumeroDossier()); 
        /* On récupère les projets du groupe */ 
        $projetDuGroupe = $em->getRepository('CommercialBundle:Projet')->findBy(array('groupe' => $groupe)); 
        $m = '001'; 
        if(sizeof($projetDuGroupe) != 0) { 
         $m = sizeof($projetDuGroupe) + 1; 
         if($m < 10) 
          $m = '00'.$m; 
         else 
          $m = '0'.$m; 
        } 


        /* On enregistre le numéro de projet du projet */ 
        $projet->setNumeroProjet($m); 


        /* On enregistre le groupe */ 
        $projet->setGroupe($groupe); 
       } 
      }   


      /* On enregistre l'impression */ 
      if($dataProjet['impression'] != null) { 
       $projet->setImpression($dataProjet['impression']); 
      } 


      $em->persist($projet); 
      $em->flush(); 
     return $response; 
} 

アヤックス

/** 
* Affichage du pop-up 
*/ 
function nouveauProjet() { 
    var route = '{{ path("nouveau_projet") }}'; 

    return $.ajax({ 
     type: 'GET', 
     url: route, 
     success: function(data) { 
      $('.modal.modal-creation-projet-active') 
       .modal('show'); 
      $('.modal-creation-projet-active .modal-body') 
       .empty() 
       .append(data); 

      /* Fonction editeurTexte() */ 
      editeurTexte(); 

      /* Fonction clientFiliale() */ 
      $('#creationProjet_client').change(function(){ 
       /* Id du groupe sélectionné */ 
       var client = $(this).val(); 
       clientFiliale(client,'#creationProjet_filiale'); 
      }); 

      /* Fonction clientContact() */ 
      $('#creationProjet_filiale').change(function(){ 
       /* Id de la filiale sélectionnée */ 
       var filiale = $(this).val(); 
       clientContact(filiale,'#creationProjet_contact'); 
      }); 

      /* Gestion des éléments du groupe de projet */ 
      formElement(); 


      /* On bloque l'envoi du formulaire par la touche Entrée */ 
      $('.noEnterSubmit').keypress(function(e){ 
       if (e.which == 13) return false; 
      }); 


      /* A l'envoi du formulaire */ 
      $('form[name=creationProjet]').submit(function (e) { 
       e.preventDefault(); 

       /* Fonction formErrorDate() */ 
       if(!formErrorDate()) { 
        /* Fonction creationProjetSubmit() */ 
        creationProjetSubmit(); 
       } 
      }); 

     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
     } 
    }); 
} 



/** 
* Action à l'envoi du formulaire (création) 
*/ 
function creationProjetSubmit() { 
    /* On initialise la route */ 
    var url = '{{ path("nouveau_projet_ajax") }}'; 

    return $.ajax({ 
     type: "POST", 
     data: $('form[name=creationProjet]').serialize(), 
     url: url, 
     cache: false, 
     success: function(data){ 
      $('.modal.modal-creation-projet-active') 
       .modal('show'); 
      $('.modal-creation-projet-active .modal-body') 
       .empty() 
       .append(data); 

      $('.close-modal').css('display','none'); 

      $('.btn-modifier-projet').click(function (e) { 
       e.preventDefault(); 

       /* On récupère l'id du projet dans le bouton modifier */ 
       var id = $(this).attr('id'); 

       /* On récupère le choix du projet : nouveau (=0) ou existant (=1) */ 
       var choixGroupe = $(this).attr('choixGroupe'); 

       /* On active le loader */ 
       $('.glyphicon.spinner').removeClass('noactive').addClass('active'); 

       /* Fonction modifierProjet(id) */ 
       modifierProjet(id,choixGroupe); 
      }); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
     } 
    }); 
} 
+3

コードは役に立ちます – delboy1978uk

答えて

0

です。

誰かがすでにこの問題を持って、それを修正する方法を知っていますか?

それは非常に悪いコードのように聞こえます。チェックはajaxより新しいポップアップは本当に新しいフォーム(隠された入力など...)を提供しています。永続化されたプロジェクトのIDがどのように取得されているか確認し、フォームデータには含めないでください。それは、ブラウザのキャッシュに問題

ですか?

いいえ(POSTリクエストはキャッシュされません)

0

私のコントローラでは、私は自分のフォームをこのように呼ん:

$projet = new Projet(); 
$form = $this->createForm(new CreationProjetType($this->getDoctrine()->getManager()), $projet); 

は、それがかつての$プロジェクトを取得することができますと思いますか?

関連する問題