51 votes

Meilleur Endroit pour la Validation de Modèle/Vue/Contrôleur de Modèle?

Je suis en train de travailler sur un projet PHP qui fait un large usage du modèle de conception MVC. Je suis à la recherche d'ajouter la validation d'un formulaire et je suis curieux de savoir quelle est la bonne place pour la validation.

En raison de la façon dont les formes sont générées, la validation sur la publication de données est beaucoup plus simple et moins répétitive dans la vue des composants. Est-il acceptable d'avoir le point de vue de la validation des données de réponse, ou devrait-il être mis en œuvre dans le contrôleur, ou même le modèle?

Quels sont les avantages?

98voto

Mike Lewis Points 29305

Le bon endroit pour la validation du Modèle.

Cela fait plus de sens parce que vous faites de validation sur les données, qui est ce qui représente le modèle. En termes de CRUD mises à jour, le modèle doit toujours être utilisé en quelque sorte.

  • Si vous modifiez les données de la vue, vous devriez avoir des validations en cours de vérification.

  • Si vous avez des contrôleurs de changer de données, vous devriez avoir des validations en cours de vérification.

  • Et enfin si vous avez d'avoir le le modèle lui-même la modification de données, vous devrait avoir des validations.

La seule façon d'atteindre cet état est d'avoir la validation d'aller dans le modèle.

En raison de la performance et une réponse plus rapide, après la mise en œuvre des validations dans le modèle, vous devez vous essayez d'ajouter une sorte de client(JS) à informer immédiatement l'utilisateur final.

La Validation est toujours sur les données. Pourquoi êtes-vous de la validation des données? Vous pouvez donc conserver l'intégrité de l'information de votre stockage. Avoir les validations au niveau du modèle de données permet théoriquement être toujours correct. C'est toujours un neccesity. De là, vous pouvez ajouter des validations dans une logique d'entreprise et côté client pour rendre votre application plus conviviale.

31voto

AbiusX Points 1449

Si vous êtes à la validation des données côté client (j'.e de validation Javascript) qui n'est absolument pas assez et de ne pas sécurisé du tout, Vous devez la mettre en œuvre en Vue.

Si vous êtes à la validation des données sur le côté serveur, Et votre validation de ne pas exiger l'application de la logique métier (j'.e vous n'êtes pas le temps de vérifier si l'utilisateur a assez de crédit dans son compte), Vous devez valider dans le contrôleur.

Si la validation d'une entreprise nécessite de la logique, de la mettre en Œuvre à l'intérieur du modèle et de l'appeler via le contrôleur.

Publication de validation n'est pas bon car il met beaucoup de pression et de retard, Et le seul avantage est pour le programmeur (à ne pas comptabilisés).

Vous pouvez utiliser des regex pour la plupart de validation, Qui a la même syntaxe (presque) sur PHP et JS.

1voto

mjs Points 9378

La Validation du modèle semble être l'approche la plus commune (vous vous retrouvez avec quelque chose comme $obj->isValid()) et c'est adapté à de nombreuses situations.

Toutefois, en fonction de votre cas d'utilisation, il peut y avoir de bonnes raisons pour effectuer la validation à l'extérieur du modèle, soit à l'aide de séparer le code de validation ou dans le contrôleur, etc.:

  • Si une grande partie de l'ensemble du problème de validation de l'information n'est pas accessible pour le modèle (par exemple, si un administrateur peut effectuer des transformations qu'un utilisateur normal ne peut pas, ou certaines propriétés ne peuvent pas être modifiés après une certaine date), alors vous pourriez vouloir vérifier l'ensemble de ces contraintes dans le même lieu.
  • Il peut également être approprié ou nécessaire de l'appliquer très laxiste des règles de validation lors de la construction d'objets pour les tests. (Un "panier" d'un objet peuvent doivent normalement faire l'objet d'un utilisateur associé, qui à son tour nécessite une adresse email valide, etc. 100% valide panier de l'objet peut être gênant pour construire dans le panier d'achats tests d'unité).
  • Pour des raisons historiques, les règles de validation peut changer (par exemple, l'application d'un "genre" là où, auparavant, aucun n'a été nécessaire) et vous pouvez vous retrouver avec des versions différentes de données qui doivent être traités différemment. (Les différentes règles de validation peut également s'appliquer à des données en vrac de l'importation).
  • Si la validation est très complexe, vous voudrez peut-être fournir les différents messages d'erreur (ou pas) selon ce qui est le plus utile pour l'appelant. Dans d'autres situations, true ou false peut être tout ce qui est nécessaire.

Il peut être possible de traiter ces différents cas d'utilisation via des arguments pour le modèle de l' isValid() méthode, mais cela devient de plus en plus lourd à mesure que le nombre de validation des styles augmente. (Et je crois qu'il est presque garanti qu'un seul "one size fits all" isValid() méthode finira par s'avérer insuffisant pour la plupart des non-trivial de projets.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X