Quelle est la bonne approche pour traiter avec des codes de validation répétitifs et longs?

StackOverflow https://stackoverflow.com/questions/1419619

  •  07-07-2019
  •  | 
  •  

Question

Je n'ai que récemment commencé la programmation Web et je suis assez étonné que, bien que j'utilise une bibliothèque de validation, j'obtiens toujours 20 à 30 lignes de code pour la validation seule, sans compter les messages d'erreur et les fonctions de rappel. J'utilise le framework MVC de Kohana et je me demandais s'il était possible de raccourcir mes codes de validation. J'ai essayé de penser à ce qui suit

  1. mettre des codes de validation dans mon modèle (ce qui est tout à fait le cas pour un noob comme moi).
  2. créer une très petite bibliothèque pour valider les entrées (quelque chose qui se raccorde à la classe de validation, me permettant ainsi d’appeler la bibliothèque pour des procédures répétitives telles que l’enregistrement, la modification et tout ce qui est utilisateur)

Ou existe-t-il des moyens meilleurs et plus efficaces?

Était-ce utile?

La solution

Je recommanderais vivement de travailler sur l’inclusion de la validation dans le modèle. Une fois que vous êtes capable de faire un, tous les autres que vous créez seront beaucoup plus faciles. De plus, si plusieurs contrôleurs tentent de sauvegarder ces données, vous n'avez pas besoin de recoder la validation. La documentation Kohana contient quelques exemples d'intégration de la bibliothèque de validation et de l'ORM. Vous devriez commencer par là.

Autres conseils

J'utilise Zend_Validate avec Zend_Forms pour la validation dans laquelle le code de validation est dans la méthode init de formulaires. Tout ce que je dois faire est de passer un tableau de validateurs pour chaque élément et d’exécuter ..

$form->isValid($data);

... en dehors du formulaire pour valider les données.

Le tableau de validation comporte facilement plus de 30 lignes car je sépare chaque entrée du tableau avec une nouvelle ligne. Mais je suppose que vous aurez cela si vous définissez des règles de validation très précises pour chaque élément droit.

Et c’est vraiment facile de définir de nouveaux validateurs dans Zend.

edit: j'ai découvert un framework qui étend le Zend Framework, permettant aux objets de domaine de contenir sa propre validation. C'est ce qu'on appelle le framework Xyster mais je ne pouvais pas le faire fonctionner du premier coup, donc je n'ai pas essayé après.

Voici ma stratégie pour traiter le code de validation. Je suppose que par «bibliothèque de validation», vous entendez ceux qui s'assurent simplement qu'un courrier électronique est un courrier électronique, les numéros de téléphone sont numériques et ne sont pas de nature commerciale.

L’idée est d’avoir chaque code de règle de gestion comme un foncteur - s’il s’agit de PHP, vous pouvez le faire en utilisant simplement une chaîne pour définir la fonction; pour d'autres langues, vous devrez peut-être utiliser le modèle de stratégie. Définir une interface pour le foncteur (non nécessaire pour PHP) et la vider dans un tableau.

Parcourez le tableau, ce qui renverra succès, erreur et code d'erreur à un tampon. A la fin, examinez le tampon d'erreur et déterminez quelle validation a échoué. Utilisez-le pour personnaliser la vue.

Voici un exemple

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

À la fin, vous aurez un tableau de résultats, chacun rempli d’un processus de validation, et vous savez lequel a échoué et lequel ne l’a pas encore fait. Cela peut ensuite être transmis au côté client pour un traitement ultérieur, comme pour mettre en surbrillance les champs ayant échoué. Le code_erreur peut être utilisé pour rechercher le message d'erreur approprié et le formatage qui lui est appliqué.

Je ne suis toutefois pas vraiment sûr de ce que vous entendez par rappel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top