2010-12-13 46 views
3

J'utilise Magento & PHP CodeIgniter MVC pendant environ 4 mois. J'ai un problème particulier de comprendre où placer la logique de validation pour les deux CodeIgniter & Magento, seulement si je considère suivre l'architecture MVC à sa vraie nature & d'une manière sémantique très correcte.Questions générales sur MVC PHP & Validations Magento

Tout d'abord, je vais commencer avec Magento: -

Dire que j'ai un module « Assignment » dans Magento, qui est sur les joueurs & Tournois deux. J'ai 3 méthodes d'action, dans ce "Assignment" contrôleur de module, où je dois vérifier & valider les éléments suivants: -

  1. L'ID du Joueur
  2. Tournoi ID

Cette validation est également nécessaire la classe Block du module "Assignment", ainsi que dans les 3 méthodes d'action.
Donc, ma question est devrais-je écrire les validateurs les 2 points ci-dessus dans la classe contrôleur de ce module ou dans la classe du modèle, parce que je vais avoir besoin d'utiliser les validations à la fois dans la classe Bloc & également dans la classe Controller?

De même, que suggère réellement l'architecture MVC dans ce cas?

Si possible, veuillez fournir un extrait de code, en soulignant la logique de votre implémentation.

En ce qui concerne CodeIgniter ou tout autre framework MVC PHP: -

Depuis la validation de tout ce qui utilise des sessions est tout à fait spécifique à la page & car il n'y a pas de concept de blocs dans CodeIgniter, donc normalement la session de validation & réglage des variables de session sont fait dans la classe Controller uniquement.

Donc, ma question à ce sujet est que c'est une approche correcte & dans quelles circonstances dois-je mettre setters de sessions & validations de session dans la classe Model?

Et encore une fois, que suggère l'architecture MVC dans ce cas?

Et encore, si possible, s'il vous plaît fournir un extrait de code, mettant en lumière la logique de votre mise en œuvre.

Je suis vraiment dans un état de confusion au sujet de cette & Je suis un peu coincé ici. Aidez-moi s'il vous plaît ici. Toute solution/aide est grandement appréciée. Merci d'avance.

EDIT: -

Si possible, s'il vous plaît fournir un code Magento sur la façon de créer & écrire Validations appropriées, ainsi que jeter des exceptions, avec les réels messages d'exception définis dans les méthodes de modèle?

Répondre

5

La couche modèle devrait être en mesure de maintenir sa propre cohérence, donc indépendamment des autres décisions, vous devez inclure validateurs dans la couche de modèle.Pour aider l'utilisateur (et fournir des messages de validation plus utiles), vous pouvez également effectuer une validation au niveau du contrôleur. L'avantage de cette approche est que, en supposant que vous mainteniez votre couche de modèle, il n'y a aucune chance qu'un contrôleur malveillant établisse de mauvaises données. Cela joue dans votre deuxième question, pour laquelle la réponse Magento serait d'utiliser un objet pour gérer les données dans certaines parties de la session, et de valider ces données sur le chemin de la session. En outre, pour gérer les validations dans vos Blocs/Vues, ​​pensez à utiliser une validation comme celle-ci. Il a ses propres défauts, mais minimise généralement la quantité de code de validation que vous devez écrire:

// make sure that the below returns the relevant assignment model class 
$assignment = $this->getAssignment(); // or get it via a session, or helper, or what have you. 
$player = getChosenPlayer(); 


try { 
    $assignment->setPlayer($player); //throws exception when invalid 
    ... do more ... 
    $assignmnent->save(); 
} catch(SomeException $e) { 
    addValidationError($e->getMessage()); 
    renderPageAgain(); 
}