Bonjour,
j'ai suivi le tuto suivant de Baptiste Pesquet : http://bpesquet.developpez.com/tutor...hitecture-mvc/
Je me suis arrêté avant la construction du mini Framework, car la structure du site me suffisait amplement sans devoir passer par le Framework.
Mais j'ai besoin de quelques précisions concernant l'architecture.
la première :
Est-il possible que pour certains contrôleurs, qu'aucun Modèle ne soit défini, par exemple pour la page d'accueil où le contenu n'est pas forcément dynamique?
(Pour le moment je crée mes modèles pour tous mes contrôleurs, mais ils sont vides.)
la deuxième :
j'ai créé une section inscription sur le site, j'appelle donc mon contrôleur Inscription qui affiche le formulaire. Lorsque l'utilisateur valide le formulaire, le formulaire est envoyé au Routeur principal.
Le routeur principal appelle de nouveau le contrôleur Inscription qui fait l'insertion dans la DB via une fonction, et le routeur principal appelle ensuite un controleur Information qui affiche une information à l'utilisateur.
le code =>
controleurInscription.php
le modèle Inscription :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php require_once 'Modele/Inscription.php'; require_once 'Vue/Vue.php'; class ControleurInscription { private $inscription; public function __construct() { $this->inscription = new Inscription(); } public function inscription() { $vue = new Vue("Inscription"); $vue->generer(null); } public function inscrire($nom,$prenom,$pseudo,$mdp,$mail,$datenaissance,$question,$reponse) { $this->inscription->ajouterMembre($nom,$prenom,$pseudo,$mdp,$mail,$datenaissance,$question,$reponse); } }
la vue Inscription
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php require_once 'Modele/Modele.php'; class Inscription extends Modele { public function ajouterMembre($nom,$prenom,$pseudo,$mdp,$mail,$datenaissance,$question,$reponse) { $sql = 'insert into membres (nom,prenom,pseudo,mdp,mail,datenaissance,question,reponse,date) values(?,?,?,?,?,?,?,?,?)'; $date = date('d/m/Y'); $this->executerRequete($sql,array($nom,$prenom,$pseudo,$mdp,$mail,$datenaissance,$question,$reponse,$date)); } }
et enfin le routeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php $this->titre="Palette Leuzoise - Inscription"; $this->entete="Inscription"; $this->idpage="inscription"; ?> <form id="formInscription" onsubmit="return validationInscription();" action="accueil" method="post"> <label>Nom : <input type="text" name="nom" required /></label> <label>Prénom : <input type="text" name="prenom" required /></label> <label>Pseudo :<input type="text" name="pseudo" required /></label> <label>Mot de passe :<input type="password" name="password1" id="password1" required /></label> <label>Confirmation mot de passe :<input type="password" name="password2" id="password2" required /></label> <label>Adresse e-mail :<input type="email" name="mail1" id="email1" required /></label> <label>Confirmation adresse e-mail :<input type="email" name="mail2" id="email2" required /></label> <label>Date de naissance :<input type="date" name="datenaissance" required /></label> <label>Question :<input type="text" name="question" required /></label> <label>Réponse :<input type="text" name="reponse" required /></label> <div class="g-recaptcha" data-sitekey="xxx"></div> <input type="submit" name="btInscription" value="M'inscrire" /> </form>
j'ai besoin de plusieurs précision.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 public function routerRequete() { try { if(isset($_GET['action'])) { $this->action = $_GET['action']; if($this->action == 'accueil') { if(isset($_POST['btInscription'])) { $nom = $this->getParametres($_POST,'nom'); $prenom = $this->getParametres($_POST,'prenom'); $pseudo = $this->getParametres($_POST,'pseudo'); $mdp = $this->hashMdp($this->getParametres($_POST,'password1')); $mail = $this->getParametres($_POST,'mail1'); $datenaissance = $this->getParametres($_POST,'datenaissance'); $question = $this->getParametres($_POST,'question'); $reponse = $this->getParametres($_POST,'reponse'); $this->ctrlInscription->inscrire($nom,$prenom,$pseudo,$mdp,$mail,$datenaissance,$question,$reponse); $this->ctrlInformation->information($typeInfo,$prenom,$mail); } else { $this->ctrlAccueil->accueil(); } } else if($this->action == 'listedeforce') { $this->ctrlListeDeForce->listedeforce(); } else if($this->action == 'calendrier') { $this->ctrlCalendrier->calendrier(); } else if($this->action == 'entrainements') { $this->ctrlEntrainements->entrainements(); } else if($this->action == 'leclub') { $this->ctrlLeClub->leclub(); } else if($this->action == 'inscription') { $this->ctrlInscription->inscription(); } else { throw new Exception("Action non valide " . $this->action . $_SERVER['REQUEST_URI']); } } else { $this->ctrlAccueil->accueil(); } } catch(Exception $e) { $this->erreur($e->getMessage()); } }
Tout d'abord, l'envoi du formulaire se fait vers action=accueil, ne serait-ce pas plus propre de l'envoyer vers action=inscription pour rester dans le même contexte? et là de tester l'existence de la variable $_POST?
Ensuite lorsque l'inscription dans la DB est faire, j'appelle le controleur Information dans le routeur. est-il bien mis à cette endroit? ne faut-il pas le mettre dans le contrôleur Inscription dans la fonction d'insertion? ( ça me semble plus logique dans le Routeur, mais je ne suis pas sûr de l'endroit )
Dernière question :
Est-il possible qu'un contrôleur génère plusieurs vues ou sort-on, dans ce cas là, de l'architecture MVC?
Je m'explique:
J'ai mon contrôleur Information, qui servira à afficher des informations à l'utilisateur, par exemple pour lui dire que son compte a bien été créé ou par exemple qu'il ne peut pas se logguer car son compte n'a pas été activé, mais forcément la structure de la vue ne sera pas la même.
Est-il préférable de créer dans ce cas là, plusieurs contrôleurs en fonction du type de message ou puis-je le faire avec un seul contrôleur?
Merci pour les précisions que vous pourrez me donner.
Partager