Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 13/03/2011, 03h46   #1
Invité de passage
 
Inscription : mars 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 2
Points : 0
Points : 0
Par défaut Zend_Form & Dojo, validation côté serveur.

Bonsoir,
Je ne parviens pas à réaliser la validation des champs côté serveur, en utilisant dojo.

J'ai par exemple, un champ email, de type ValidationTextBox, je tente de surcharger la methode "validator" pour exécuter une requête ajax vers le controller/action contenant mon formulaire, afin de valider ce champ.

Sauf qu'étant une requête ajax, c'est un peu compliqué sachant que le validateur de dojo attend un résultat immédiat ..

Comment faites-vous vos validations ?
Faut-il maintenir 2 validations non-homogène .. ?

Je préfère avoir qu'une validation côté serveur et dojo affiche les tooltips (messages) et les status (décorateurs rouges et icônes) des champs en fonction de celle-çi ...

De plus, lorsque je tente de récupérer mes éléments de formulaire, je me retrouve avec tout ceux ajouté par dojo, je dois passer par dijit.byId("form_id").get("value") pour avoir les clefs de mes ids de mes propres champs .. :S !

Toute aide est la bienvenue !
Gworr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 10h16   #2
Invité de passage
 
Inscription : mars 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 2
Points : 0
Points : 0
j'étoffe un peu mon message précédent, si on regarde dans la doc de dojo :

Code :
1
2
3
4
5
6
7
8
9
10
dijit.byId("validationTextBoxNodeId").validator = function (value, constraints) {
 
    // Check that email has not been used yet.
    if (some-checks) {
        return true;
 
    } else {
        return false;
    }
}
Pour effectuer des contrôles sur les champs, côté serveur, c'est cette méthode qu'il faut surcharger, puis assigner le message d'erreur comme attribut "invalidMessage" afin de l'afficher dans la tooltip. En retournant "false", dojo ajoute bien le décorateur erreur au champ.

Maintenant, je souhaiterais effectuer un ajax et selon le retour de cette ajax, retourné "true" ou "false" selon la validation côté serveur.

Code :
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
 
var form = dijit.byId('reservation_form');
values = form.get("value");
    for (x in values) {
		dijit.byId(x).validator = function (value) {
			var invalidMessage = [];
 
			var xhrArgs = {
		    	form: form.domNode,
		    	sync: true,
		        handleAs: "json",
		        preventCache: true,
		        load: function(data, status) {
		        	if (data.errors[x]) {
		        		for (y in data.errors[x]) {
		        			invalidMessage.push(data.errors[x][y]);
		        		}
		        	}
		        };
		    }
 
		    var deferred = dojo.xhrPost(xhrArgs);
 
		    if (invalidMessage.length) {
		    	this.set("invalidMessage", invalidMessage.join("\n");
		    	return false;
		    }
 
		    return true;
		}
    }
voilà, quelque chose du genre, pour pouvoir surcharger chacun des champs de mon formulaire et les valider côté serveur avec les validateurs de Zend_Validate_*

Des idées sur comment faire ? Récupèrer les champs de mon formulaire sans devoir passer par "form.get('value')" ? (là ça fonctionne pas )

j'avais aussi le désire d'utiliser un objet dojo, car dans zend, si on assigne:

"validator" => "custom.validationXhr" par exemple, ou "validationXhr" est un objet perso pour valider, le constructor reçoit bien les arguments values et constraints, mais peu importe le retour, il n'est pas pris en compte ..
Gworr 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 19h44.


 
 
 
 
Partenaires

Hébergement Web