用户可以使用ajax在弹出窗口中创建带有表单的项目。他们使用Chrome来访问该工具。
问题在于,有时当他们创建新项目时,表单会保存以前项目的信息,因此他们会丢失新项目的数据。
是否有人已经遇到此问题并知道如何解决此问题?这是浏览器缓存的问题吗?
感谢您的帮助!
编辑这是我的代码
Twig view
<!-- 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;
}
的Ajax
/**
* 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);
}
});
}
答案 0 :(得分:0)
你的问题质量很差。
是否有人已经遇到此问题并知道如何解决此问题?
这听起来像是非常糟糕的代码。检查比ajax新弹出窗口确实提供了一个新表单(隐藏输入等...)。检查项目的id是如何持久化的,它不应该包含在表单数据中。
浏览器的缓存有问题吗?
否(未缓存帖子请求)
答案 1 :(得分:0)
在我的控制器中,我这样称呼我的表格:
$projet = new Projet();
$form = $this->createForm(new CreationProjetType($this->getDoctrine()->getManager()), $projet);
你认为它可以获得以前的$项目吗?