|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Pierre Lachaux Inscription : janvier 2011 Messages : 2 ![]() |
Bonjour,
Première question: J'ai un formulaire avec un champ pour le nombre total d'employés, et deux champs pour les employés techniciens et les employés ingénieurs. Je voudrais faire un test pour que le nombre de techniciens plus le nombre d'ingénieurs soit inférieur ou égal au nombre total d'employés mais je ne vois pas comment faire. Les deux champs techniciens et ingénieurs ne sont pas obligatoirement renseignés. Deuxième question: Dans mon formulaire, j'ai un champ testé avec sfValidatorNumber. Mon problème est que je voudrais que l'utilisateur puisse entrer des décimales avec une virgule en plus des décimales avec un point. Il faudrait donc que je transforme les virgules en point automatiquement lors de l'envoie du formulaire mais je ne vois pas à quel endroit je pourrais faire cela. Merci d'avance pour votre aide |
|
|
00
|
|
|
#2 | ||
|
Nouveau Membre du Club
![]() Développeur Web Inscription : juillet 2007 Messages : 12 ![]() |
Bonjour,
je ne serais trop te conseiller de commencer a voir les postValidator qui te permettent de valider certaines valeurs de ton formulaire mais avec une méthode qui n'est pas celle des validateurs classiques de symfony. du coup les champs de ton formulaire ne sont que des inputs et tu vérifies les valeurs grâces a ces méthodes qui sont appelées pour la validation de ton formulaire. Code :
|
||
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Pierre Lachaux Inscription : janvier 2011 Messages : 2 ![]() |
Merci beaucoup, j'ai réussi à faire ce que je voulais.
Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Pour la première question, manifestement cela marche. Je suis un peu surpris par l'utilisation d'un sfValidatorErrorSchema dans ta fonction callback, je n'y avait jamais pensé, il faut que je me teste cela.
Tu dois pouvoir simplifier ton postValidateur, si tu n'as qu'une condition à tester il ne sert à rien de le mettre dans un sfValidatorAnd. @GaapTap tu dis : "les postValidator qui te permettent de valider certaines valeurs de ton formulaire mais avec une méthode qui n'est pas celle des validateurs classiques de symfony" En fait le postValidateur (il est unique) permet de tester des données une fois les validateurs individuels passé, généralement ce que l'on ne peut pas faire sur des individuel, c'est a dire des données issues de plusieurs champs. Rien n’empêche qu'elles soient traitée par des validateurs "standard". Il existe un validateur, le sfValidatorCallback qui lui permet de valider des données "avec une méthode qui n'est pas celle des validateurs classiques de symfony" Pour la deuxième question. Je pense que le plus simple est d'écrire un nouveau validateur. C'est beaucoup plus simple à faire qu'à écrire ici Tu peux le créer dans ton application, dans un dossier /lib/validators et tu l'appel comme tu le veux. Le plus simple serait de soit dériver sfValidatorNumber, soit de repartir directement de sfValidatorBase et de t'inspirer de sfValidatorNumber pour ton code. Il te revient de réécrire la méthode doClean() qui, simultanément, nettoie la valeur retournée et la valide. Attention malgré tous à ce que l'utilisateur peut te retourner, il est capable de renvoyer un truc dans le genre 1234.56 ou 1234,56 mais aussi 1 234.56 ; 1,234.56 ; 1 234,56 ; 1.234,56 ... Il y a ici plein d'informations et de truc autour de la fonction is_numeric.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : juillet 2007 Messages : 12 ![]() |
La méthode setPostValidator ne peut contenir qu'un objet héritant ou de type sfvalidatorBase.
Parmi les objets l'on peut utiliser sfValidatorAnd qui peut contenir un tableau d'objets validators basé sur sfValidatorBase. On l'utilise généralement pour plusieurs validators personnel à exécuter. Nous avons aussi sfValidaorCallBack qui lui ne fait appel qu'a une seule méthode de validator personnelle. Donc pour finir pourquoi utiliser l'expression "les postValidators" ? Parce que vu ce qu'il veut faire, je ne vais pas réinventer un validator qui va demander plus de travail pour juste un . au lieu d'une , comme tu le soumets. Mais refaire un postValidator avec une expression régulière un preg_match_replace une réinjection dans les values, ce qui contiendra 3 lignes de codes. Donc oui il lui serait souhaitable qu'il utilise les postValidators dans son cas. un Postvalidator pour les techniciens un PostValidator pour remplacer son . par sa , Après il est bon qu'une personne a qui l'on donne une piste, un conseil, un bout de code, fasse lui aussi des recherches.
|
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Je ne suis pas bien sur de voir la différence que tu mets entre les validators et les pre et post validator.
En effet tant pour les validator "normal" directement rattachés à un champ que pour les preValidator et postValidator, ils ne peuvent avoir comme élément que des enfants de sfValidatorBase. Ce qui est le cas de tous les validateurs. C'est plus une question de quant la validation aura lieu qui est intéressante ici. Pour le cas exposé ici, valider et nettoyer une donnée, je ne vois pas en quoi un validateur sfValidatorRegex pourrait répondre à la demande. En effet, il pourra valider la demande, mais il ne pourra nettoyer la chaine pour en faire un nombre valide (ce qui est bien dommage, il y a peut-être, là, un nouveau validateur a créer). Je ne vois pas plus l'intérêt de dissocier le validateur du champ pour le mettre dans un postValidateur. On va perdre la liaison directe entre la valeur et la validation et on ne pourra nettoyer la valeur. Créer un validateur n'est pas quelque chose de très compliquer et je reste convaincu qu'il y a souvent avantage à créer un nouveau validateur plutôt que d'utiliser le sfValidatorCallback, sauf s'il n'y a qu'une fonction à utiliser et pas de code spécifique à mettre en œuvre.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com