2010-04-25 5 views
1

Je suis dans un dilemme sur la meilleure façon de gérer la situation suivante. J'ai un long processus d'inscription sur un site, où il y a environ 10 sections de formulaire à remplir. Certains de ces formulaires concernent spécifiquement l'utilisateur et ses données personnelles, tandis que la plupart concernent les animaux de compagnie de l'utilisateur - ma configuration actuelle gère les formulaires spécifiques à l'utilisateur dans un User_Controller (par exemple, via des méthodes comme utilisateur/profil, utilisateur/ménage, etc.), et de même les formulaires liés à l'animal de compagnie sont traités dans un Pet_Controller (par exemple animal/santé). Si toutes ces méthodes doivent être combinées dans un seul Registration_Controller, je ne suis pas sûr - je suis ouvert à tout conseil à ce sujet.

Quoi qu'il en soit, mon problème principal est que je veux générer une barre de progression qui montre à quelle distance dans le processus d'enregistrement chaque utilisateur est. Comme les urls dans chaque section de formulaire peuvent potentiellement être mappés à différents contrôleurs, j'essaie de trouver un moyen propre d'extraire à quel stade une personne est dans le processus global. Je pourrais juste utiliser la chaîne de requête pour passer un paramètre d'étape avec chaque demande, par exemple user/profile? Stage = 1. Une autre façon de le faire est potentiellement d'utiliser le routage - par exemple, les URL pour chaque section du formulaire pourraient être configurés pour être registration/stage/1, registration/stage/2 - alors je pourrais simplement mapper ces URLs au contrôleur approprié/méthode dans les coulisses.

Si cela a du sens, quelqu'un a-t-il des conseils à me donner?

Répondre

0

Je pense que la création d'un SignupController est une bonne idée. L'enregistrement initial de l'utilisateur est un processus distinct et doit être distinct des tâches générales de gestion de profil.

Si vous avez été un bon développeur et que vos contrôleurs sont minces et que vos modèles sont gros, vous devriez être capable d'éviter toute duplication de code. Si vous vous trouvez dupliquer, c'est probablement une bonne idée de penser à refactoring.

À titre d'exemple concret, tenez compte de l'adresse électronique de votre utilisateur. Disons que vous êtes assez strict, et chaque fois qu'un utilisateur change son adresse e-mail, il doit faire une petite confirmation-email dance. Lors de l'inscription, vous souhaiterez que l'utilisateur revienne au processus d'inscription après avoir cliqué sur son lien de confirmation. Lorsqu'un utilisateur existant change d'adresse e-mail, vous voulez qu'il atterrisse ailleurs (comme son profil). Il est probable que vous ayez besoin de contenu différent dans le corps de l'e-mail de confirmation. Essayer de faire/user/profile gérer les deux cas va commencer à créer un tas de complexité où l'action doit comprendre le contexte et se comporter en conséquence.

La meilleure solution est de décider que l'inscription est son propre mode d'interaction, distinct de la gestion générale du profil. Par conséquent, il obtient son propre contrôleur, qui partage des ressources de modèle et d'affichage avec d'autres contrôleurs.

C'est ma prise, de toute façon.

+0

Bonjour, mes modèles traitent les interactions validation/db. Accepter d'avoir un contrôleur d'inscription - tous les formulaires sont liés, même s'ils interagissent avec différents modèles - d'un point de vue OO, les modèles représentent mes données en tant qu'objets, je n'ai pas besoin de mes contrôleurs pour le faire aussi. Le seul problème est que, outre les formulaires d'inscription, il y aura également des formulaires en cours qui seront similaires. Cela peut impliquer une certaine duplication du code, mais la flexibilité de séparer les formulaires en cours des formulaires d'enregistrement en différents contrôleurs sera bénéfique - est-ce logique? – chrisj

+0

Oui, les formulaires peuvent être un problème. Selon votre cadre, vous pourriez être en mesure de bien factoriser les choses. J'utilise Zend_Form assez souvent, ce qui est bien, car vous pouvez utiliser la composition pour modifier les choses au besoin. Vous avez donc une classe de formulaire qui représente la forme dans son état "naturel", mais si vous avez besoin d'une version spéciale, installez simplement la forme "naturelle", puis ajoutez/supprimez/changez les bits de celle-ci. Si vos formulaires sont simplement HTML dans des modèles, vous finirez probablement par vous répéter. Vous pouvez essayer d'être intelligent à ce sujet, mais le faire "bien" dépend de votre cadre – timdev

Questions connexes