Fais attention à ne pas t'emmêler les pinceaux entre le relationnel et l'objet, ce sont deux mondes différents, les classes ne sont pas des "copies" des tables.
Pour faire le point sur un modèle MVC simplifié histoire de s'entendre sur les rôles des différentes classes imaginon un espace privé accessible par login et mot de passe avec un seul contrôleur (toutes les requêtes pointes vers ce contrôleur, la page index par exemple, en paramètre de la requête nous passons le nom de l'action à exécuter) :
- Page login :
Un formulaire avec 2 champs login et pwd, l'action du formulaire est "index.php?action=LoginAction"
- Le contrôleur :
Il gère toutes les requêtes. La première chose à savoir c'est si l'utilisateur est authentifié, c'est simple, si dans la session il y a un paramètre "user" non null alors le client est authentifié. (Le cas de l'action login est particulier, mais dans tous les autres cas si "user" est null alors le contrôleur redirige vers la page de login). Le contrôleur récupère le paramètre action, teste si c'est LoginAction, si oui il demande à une classe LoginAction de traiter la demande puis redirige en fonction du résultat retourner par LoginAction.
- La classe LoginAction :
Récupère les paramètres login et pwd, délègue à une classe d'accès aux données la requête qui retourne un résultat null si l'utilisateur n'est pas trouvé sinon un tableau contenant les informations sur l'utilisateur. Si un résultat non null est retourné alors LoginAction construit le User (éventuellement récupère d'autres données auprès de la classe d'accès aux données), stocke le User dans la session, retourne true (pour faire simple) pour indiquer au contrôleur que l'action a bien été exécutée.
- Retour au contrôleur :
L'action LoginAction s'est bien déroulée, le contrôleur redirige vers la page d'accueil de l'espace membre, l'action retourne false, le contrôleur redirige vers la page login.
Bon c'est très simplifié ! Il n'y a pas la gestion des erreurs (qui doivent éventuellement être affichées à l'écran), la construction de la vue, l'exécution éventuelle d'une autre action...
Imaginons que l'utilisateur est authentifié et envoie une requête depuis la page d'accueil "index.php?action=ShowUserListAction". Comme son nom l'indique, le résultat est l'affichage à l'écran de la liste de tous les utilisateurs. C'est au contrôleur (ou une/des classe(s) déléguées) de vérifier si l'utilisateur a le droit d'exécuter cette requête.
Dans un premier temps, le contrôleur vérifie dans la session que user n'est pas null, ensuite il récupère le paramètre action. Il vérifie que l'utilisateur a le droit par exemple avec if($user->isShowUserListAction()){...}else{...}.
Est-ce qu'on avance ?
Exemple de contrôleur (la page index.php) :
Code : Tout sélectionner
user = getParam("user")
IF user is NULL
actionPerformed = FALSE
ELSE
action = getParam("action")
IF action is LoginAction
actionPerformed = execute LoginAction
ELSE IF action is ShowUserListAction
IF user isShowUserListAction
actionPerformed = execute ShowUserListAction
ELSE
actionPerformed = FALSE
...
ELSE
actionPerformed = execute LogoutAction
DO actionPerformed
"actionPerformed" devrait être autre chose qu'un booléen, un objet par exemple

. Car après l'exécution d'une action il faut savoir vers où rediriger l'utilisateur
etc