2011-10-29 3 views
2

Je suis assez nouveau dans l'architecture MVC, mais je le prends bien, mon propre framework étant presque terminé.Quelle est la meilleure façon d'appeler un contrôleur avec MVC?

Néanmoins, j'ai un «problème de conception», comment appeler le contrôleur?

Le contrôleur, comme dans la fonction qui vérifie si l'utilisateur a appuyé sur le bouton Soumettre.

Exemple de commande:

$class->login($_POST['username'], $_POST['password']).

Je sais que beaucoup de cadres MVC et applications appeler par l'URL avec $_GET params, mais je pense qu'il est stupide d'avoir une méthode ou une classe pour chaque page qui a besoin d'une fonction comme vous connecter.

Comment les gars, faites-le? Quelle est votre méthode pour cela?

Toute aide est appréciée!

Répondre

1

Vous pouvez rechercher le concept du contrôleur frontal (et l'inversion de contrôle), que vous utilisez probablement déjà sous une forme quelconque, mais que vous ne connaissez peut-être pas. Le contrôleur frontal analyse l'URL et l'état actuel des choses, et détermine le contrôleur à charger.

Dans mon cadre j'ai des "routes" qui ont des attributs, l'un étant "require login". Le contrôleur frontal détermine quel «itinéraire»/contrôleur doit être exécuté et vérifie les pré-requis pour cet itinéraire, comme l'exigence de connexion. Si l'utilisateur n'est pas connecté, le login "route"/controller est chargé à la place du "route"/contrôleur demandé. Si la connexion réussit, le contrôle est transmis au contrôleur "route" approprié.

Le rôle de chaque contrôleur ne doit pas être de gérer les connexions, seul un contrôleur doit le faire, généralement le contrôleur frontal. Tout contrôleur devrait pouvoir être chargé sous n'importe quelle URL car c'est le contrôleur frontal qui détermine le contrôleur à charger. Les sous-contrôleurs ne savent pas "pourquoi" ils sont en train de charger, mais seulement qu'ils sont en train de charger pour faire leur 1 travail.

1

Vous pouvez avoir un contrôleur de base qui contient une fonction, requireAccess ($ access_level). D'autres contrôleurs étendraient ce contrôleur. requireAccess() redirigera vers la page de connexion si le niveau d'accès correct n'est pas présent.

En ce qui concerne la redirection à l'aide de variables GET pour les URL propres dans MVC, je ne recommanderais pas cela. Cela pourrait causer des problèmes sur toute la ligne avec des variables qui contiennent des barres obliques. Au lieu de cela, nous voudrions généralement obtenir la requête originale, et l'analyser nous-mêmes.

Généralement, les URL MVC suivent le modèle /Controller/Action/Id/etc

Questions connexes