Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2010, 09h57   #1
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Par défaut Validation de formulaire par AJAX

Bonjour,
Je voudrais savoir comment faire valider ses formulaires sans recharger la page, un peu comme le formulaire d'inscription sur twitter par exemple.
Lorsque vous remplissez un champ, il est automatiquement validé et un message s'affiche pour informer si les données sont conformes ou pas. J'imagine que cela se fait via AJAX. Y a-t-il un moyen "symfonique" de réaliser cela ? Merci.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 05h57   #2
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Corée

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 90
Points : 90
Créé une requête asynchrone sur le déclenchée par le click de validation du formulaire.

En javascript:
- Stop l'action pour que le formulaire ne se "submit" pas.
- Requête asynchrone en post ou tu y met les données de ton formulaire. L'URL va être celle de ton formulaire que tu peux récupérer dans le javascript.

Tu récupère tout ça normalement dans ton contrôleur "symfo-nique" comme tu dis.

Bien sur, retourne un résultat ! Tu le traite en javascript pour afficher si l'action a marché ou non. Tant qu'a faire, retourne les erreurs le cas échéant.

Un exemple vite fait avec mootools (non testé).

Code :
1
2
3
4
5
6
7
8
9
10
$('myForm').addEvent('submit', function(key) {
	key.stop();
	var options = {
		url : $('myForm').action,
		method : 'post',
		onSuccess: function() {
		// ici tu traite ton résultat
	};
	new Request(options).post();
});
Fused est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 09h53   #3
Membre expérimenté
 
Avatar de bricecol
 
Brice Colucci
Développeur informatique
Inscription : avril 2007
Messages : 357
Détails du profil
Informations personnelles :
Nom : Brice Colucci
Âge : 23

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2007
Messages : 357
Points : 544
Points : 544
Envoyer un message via MSN à bricecol Envoyer un message via Skype™ à bricecol
Voici un tout petit exemple, en trois parties (xhtml/JS/PHP)

Code :
1
2
3
4
<form id="monform" action="<?php echo url_for('@traiteMonForm')?>" method="post">
  <!-- Les champs ici avec renderRow() -->
  <p><input type="submit"/></p>
</form>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// avec JQuery
$('#monform').submit(function(){
  var form = $(this);
  var action = form.attr('action');
  var method = form.attr('method');
  $.ajax({
    url: action,
    method: method,
    data: form.serialize(),
    success: function(response){
      // traitement de la réponse ici
    }
  });
  return false;
});
Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
public function executeTraiteMonForm(sfWebRequest $request){
  $this->forward404Unless($request->isXmlHttpRequest()); // optionnel
 
  $form = new MonForm();
  // Traitements et validation du formulaire
 
  /* Pour retourner le résultat du traitement, on peut renvoyer au JS du JSON (json_encode) par exemple
  ou un simple 0/1... Tout cela avec renderText() */
}
?>
__________________
"Computers are like Old Testament gods ; Lots of rules and no mercy"
[ Les ordinateurs sont comme les dieux de l’Ancien testament ; Beaucoup de règles et aucune pitié. ] Joseph Campbell

Dénoncez les arnaques internet !
Consulter mon C.V. en ligne.
bricecol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 20h27   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
J'ai plus simple...

Première chose, il ne faut surtout pas désactiver la validation en php y compris l'éventuel renvois du formulaire, pour le cas où l'utilisateur n'aurait pas de JS actif sur son poste (faut bien valider) ou encore, celui qui modifierait le paquet POST avant l'envoie...

Tu as un plugin qui prend les validators et les utilises en JS pour pré-valider le formulaire, il marche avec 95% des validators, ce qui n'est déjà pas si mal.

Le plugin : sfJqueryFormValidationPlugin et tu n'as rien à retoucher.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h37.


 
 
 
 
Partenaires

Hébergement Web