2010-03-30 4 views
2

Je travaille sur un site que je développe en utilisant une structure MVC. Mes modèles représenteront toutes les données du site, mais je me bats un peu pour décider d'une bonne structure de contrôleur. Le site permettra aux utilisateurs de se connecter/enregistrer et voir des données personnelles sur un certain nombre de pages, mais aussi avoir accès à des pages publiques, par exemple FAQ, page de contact, etcAide à l'organisation logique des contrôleurs

C'est ce que j'ai en ce moment ...

Un contrôleur de modèle qui gère l'affichage du modèle principal. Le modèle de base du site restera le même, que vous soyez ou non connecté.

Un contrôleur de site principal qui étend le contrôleur de modèle et gère l'authentification de base. Si l'utilisateur est connecté, une méthode User :: control_panel() est appelée à partir du constructeur et cela construit le panneau de contrôle qui sera présent tout au long de la session authentifiée. Si l'utilisateur n'est pas connecté, une vue différente est chargée à la place du panneau de contrôle, par exemple avec un formulaire de connexion. Tous les contrôleurs de pages protégés/publics étendront le contrôleur de site Web.

La page d'accueil de l'utilisateur a un certain nombre de widgets que je veux afficher, ce que je fais via un Home Controller qui étend le contrôleur de site Web. Ce contrôleur génère ces widgets via les appels statiques suivants:

$this->template->content->featured_pet = Pet::featured(); 
$this->template->content->popular_names = Pet::most_popular(); 
$this->template->content->owner_map = User::generate_map(); 
$this->template->content->news = News::snippet(); 

Je suppose que la première chose que je ne suis pas sûr est de savoir si les appels statiques ci-dessus aux contrôleurs (par exemple pour animaux de compagnie et l'utilisateur) sont ok pour rester statique - ces statiques Les méthodes retourneront les vues qui sont chargées dans le modèle principal. C'est la façon dont j'ai fait les choses par le passé, mais je suis curieux de savoir si c'est une approche raisonnable. Les autres pages protégées pour les utilisateurs connectés seront similaires au Home Controller.

Les pages statiques seront traitées par un contrôleur de page qui étendra également le contrôleur de site Web, de sorte qu'il saura si le panneau de contrôle de l'utilisateur ou le formulaire de connexion doit apparaître sur le côté gauche du modèle. Les pages réservées aux membres protégés ne seront pas acheminées vers le contrôleur de page. Ce contrôleur ne traitera que les pages accessibles au public. Un problème que j'ai en ce moment, c'est que si les pages publiques et protégées étendent le contrôleur de site Web, comment éviter une boucle infinie - par exemple, l'idée est que le contrôleur de site Web devrait gérer l'authentification puis rediriger vers contrôleur demandé (URL), mais cela provoquera une boucle de redirection infinie, donc je dois trouver une meilleure façon de traiter cela.

Dans l'ensemble, cette configuration a-t-elle un sens ?! Reconnaissant pour tout commentaire.

Répondre

1

J'ai mes contrôleurs disposés comme ceci:

/** 
* Global controller 
*/ 

class MY_Controller extends Controller { 

function __construct() { 
    parent::__construct(); 

    // Load templates, modules etc 
} 
} 


/** 
* Admin controller 
*/ 


class Admin_Controller extends MY_Controller { 

function __construct() { 
    parent::__construct(); 

    // Check admin is logged in 
} 
} 

/** 
* User controller 
*/ 

class User_Controller extends MY_Controller { 

function __construct() { 
    parent::__construct(); 

    // Check user is logged in 

} 
} 

Toute page d'utilisateur étendrait User_Controller et page d'administration étendrait Admin_Controller cette façon, vous pouvez facilement mettre dans l'authentification sans beaucoup de maux de tête et de garder tout séparé.

+0

Merci feu, c'est logique et c'est comme ça que je dispose normalement d'une application avec un avant et arrière distincts - à cette occasion, je suis un peu confus par le fait que les utilisateurs connectés et les utilisateurs publics peuvent accéder des mêmes pages, j'ai donc essayé d'utiliser le Website_Controller pour faire face à cela. Mais, je devrais probablement gérer les deux types d'utilisateur distinctement ici, sans aucun croisement dans le controller_controller – kenny99

+0

Est-ce que les types d'appels statiques que je fais dans mon Home_Controller ont un sens dans le contexte d'un contrôleur chargé de générer du contenu à la vue? – kenny99

+0

Hmm, j'y pense un peu plus et j'ai un problème car je ne peux pas séparer les sections admin et public par URL - j'ai donc besoin d'une vérification globale pour voir si c'est un membre connecté ou non. Par exemple, si un membre accède à la page d'accueil publique et qu'il est déjà connecté, alors je dois inclure une vérification pour que je sache si la page d'accueil qu'il devrait voir est publique ou protégée. Cela me ramène à la case départ! – kenny99

Questions connexes