2010-01-11 5 views
2

Pour mon framework, j'ai écrit ce concept pour résoudre le problème de validation de formulaire. Je veux que ce soit aussi simple que possible pour l'utilisateur du framework.Est-ce un bon design pour faire la validation de formulaire?

Chaque formulaire (= objet) possède un ou plusieurs objets FormElements (= objets). Chaque FormElement peut avoir 0-n FormValidators (= objets). Tout facilement configuré via le backend (faites simplement glisser & drop stuff). Lorsque la vue Formulaire est affichée, elle boucle sur tous les objets FormElements et, pour chacun d'entre eux, elle boucle sur tous les FormValidators associés. De cette façon, il construit tout le JavaScript nécessaire pour valider le formulaire sur le côté client.

Un FormValidator est un objet léger qui ne définit que ces sept choses:

  • PHP nom de classe de la classe utilitaire de validation
  • nom de la méthode de la classe utilitaire de validation, qui doit être appelé
  • une chaîne pour les arguments supplémentaires (valeurs séparées par des virgules)

  • JavaScript "class" nom de l'utilitaire de validation

  • nom de "procédé" qui doit être appelé
  • un Tring des arguments supplémentaires (valeurs séparées par des virgules)

  • un objet ErrorInfo associé qui contient un message d'erreur formaté

Chaque de ces méthodes de validation prennent comme premier argument une variable d'entrée avec les données d'entrée. Chacune de ces méthodes vérifie simplement l'entrée si elle correspond à une ou plusieurs règles, et renvoie TRUE ou FALSE.

Lorsque le formulaire est soumis, un FormDataManager est créé et reçoit: - l'objet Form (il sait d'où proviennent les données) - les données d'entrée (généralement $ _POST)

Il alors juste itère sur tous les FormElements, vérifie tous leurs FormValidators, et si quelque chose est invalide, il recharge le Formulaire qui est passé le tableau des messages d'erreur. Si tout va bien, les données sont traitées plus avant (c'est-à-dire stockées dans db).

Y a-t-il des améliorations dans cette conception? Quelque chose que j'ai raté?

+0

Je pense toujours que vous devriez télécharger ceci à google code, sourceforge ou git afin que nous puissions prévisualiser votre cadre. – Gordon

Répondre

3

Un concept de validation commun que vous avez manqué, je crois, est celui des groupes de validation. Par exemple, vous souhaiterez peut-être prendre en charge l'un des scénarios suivants:

  • Le champ de formulaire B est obligatoire uniquement si le champ A a une valeur quelconque.
  • Le champ de formulaire B n'est obligatoire que si le champ A a une valeur spécifique.
  • Le champ de formulaire B n'est obligatoire que si le champ A se trouve dans une plage spécifique (numérique ou dates).
  • Un champ OU un champ B doit avoir une valeur (ils ne peuvent pas être vides tous les deux).
  • Un champ OU un champ B doit avoir une valeur (il ne peut pas être vide ou les deux ont une valeur) - (XOR).
  • Les champs Mot de passe et Confirmer le mot de passe doivent être égaux.

Et je suis sûr qu'il existe d'autres scénarios où la validation dépend de la validité ou de l'aspect optionnel d'autres éléments de formulaire. De même - «obligatoire» dans les scénarios ci-dessus peut également être simplement «applicable», ce qui serait une situation différente à nouveau. Exemple typique (système médical) ici est: "Êtes-vous homme/femme?", avec un suivi de "Êtes-vous enceinte?" pour les femmes. Ou AOP questions connexes, où vous avez l'anniversaire et avez une certaine question de suivi seulement s'ils ont 65 ans ou plus. Cela signifie que vous avez besoin d'un objet validationgroup ou validation d'association qui contient ces dépendances de manière utile et générique. Je suppose que dans votre conception, cela signifie que vous pouvez également avoir des objets FormValidator qui ne sont pas directement liés à un FormElement mais à une combinaison de FormElements et inclure une vérification conditionnelle avant de déclencher la validation.

+0

Un autre exemple typique serait: Le mot de passe et le mot de passe répété doivent être identiques pendant l'enregistrement. –

+0

Merci Josef - oui très commun en effet! Édité. –

+0

Merci Wim, je suis d'accord avec tous les points. Fait totalement sens. Je me souviens un peu de Microsoft Outlook ou Outlook Express avait un système similaire avec des règles très puissantes ... comme "si le sujet contient FOO ou BAR ou FOOBAR, et le texte commence par Bonjour, supprimer email". Je dois trouver comment faire quelque chose comme ça, générique. Truc cool! – openfrog

0

Sons intéressants. Je pense que vous êtes sur la bonne voie, surtout parce que vous semblez valider le côté client et le côté serveur.

+0

Je ne vois pas d'autre choix que de valider deux fois;) le côté client pour la facilité d'utilisation, le côté serveur pour la sécurité. – openfrog

0

Une chose que vous devriez faire (et j'ai peut-être manqué cela en lisant votre question) est de s'assurer que la validation se passe également sur le serveur. De cette façon, vos informations de formulaire sont toujours validées même si quelqu'un s'éteint ou bricole avec le javascript.

Questions connexes