Bonjour,
Codant en PHP 5 depuis quelques mois, je suis en train de développer un nouveau site avec le pattern MVC. La logique du pattern je la comprend sans problème, j'ai trouver de nombreux tutos sur le net, mais au final, chacun adapte le pattern comme il l'entend.
Ce que j'ai du mal à voir avec les exemples du net (qui sont souvent simpliste dans le fonctionnement), c'est comment en fonction de l'action dans l'url (GET), on récupère les données puis on affiche la bonne vue.
Voici une structure que j'ai commencé à faire :
le contrôleur index.php :
Je n'inclues pas le code des vus pour pas surcharger le poste. Le fichier config comprend seulement le tableau avec les différents fichiers à charger
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
66
67
68
69
70
71
72
73
74
75
76
77
78 <?php session_start(); ob_start(); //$_SESSION = array(); // Fichier de configuration de l'application include 'global/config.php'; #region Haut du site include $Config['vues']['vueHeader']; include $Config['vues']['vueBandeauLogo']; include $Config['vues']['vueMenu']; #endregion #region fonctions appelées include $Config['fonctions']['Redirection']; #endregion #region Class appelées include $Config['class']['Connexion']; include $Config['class']['Membres']; #endregion // On créé une connexion à la base de données $instanceBDD = new ConnexionBDD(); $connexion = $instanceBDD->Se_connecter(); // On vérifie que l'action GET renvoie bien le paramètre 'action' if(!empty($_GET['action']) && in_array($_GET['action'],$Config['liste_actions'])) { // Si l'action permet de s'inscrire ou de se connecter if(empty($_SESSION['id_user']) && empty($_SESSION['nom_utilisateur'])) { if($_GET['action'] === $Config['liste_actions']['tryConnecter']) { include $Config['actions']['tryConnecter']; if(!empty($resultat)) echo $resultat; // On affiche le message si l'utilisateur tente de modifier l'url mais qu'il est déjà connecté } else if($_GET['action'] === $Config['liste_actions']['tryInscrire']) { include $Config['fonctions']['VerifierMail']; include $Config['actions']['tryInscrire']; if(!empty($resultat)) echo $resultat; // On affiche le message si l'utilisateur tente de modifier l'url mais qu'il est déjà connecté } else { echo Redirection(false,null); } } else { if($_GET['action'] === $Config['liste_actions']['accueil']) { echo "Titi"; } else { echo Redirection(true,'accueil'); } } } else { // On vérifie que l'utilisateur n'et pas modifié l'url et qu'il doive se reconnecter (ou bugguer !) if(!empty($_SESSION['id_user']) && !empty($_SESSION['nom_utilisateur'])) { echo Redirection(true,'accueil'); } else { include $Config['vues']['vueFormInscription']; include $Config['vues']['vueFormConnexion']; } } ob_end_flush(); // Footer du site situé en bas include $Config['vues']['vueFooter'];
Seulement voilà, si je fais comme ca, j'ai l'impression de mélanger les actions, les vues, les données ... Si j'inclus automatiquement en haut mes vues (header, bandeau, ...) et traite les actions au milieu, ma fonction Redirection($param1,$param2), qui est un seul header location, m'affichera une erreur car du code HTML a été généré avant. Je passe par les fonctions de cache, mais je trouve pas ca terrible.
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 <?php // configuration de php ini_set("register_globals","off"); //ini_set("display_errors","off"); ini_set("expose_php","off"); $Config['fonctions'] = array('VerifierMail'=>'scripts/verifMail.php', 'Redirection'=>'scripts/redirection.php'); $Config['vues'] = array('vueFormInscription'=>'vues/accueil_non_connecter/formInscrire.php', 'vueFormConnexion'=>'vues/accueil_non_connecter/formConnexion.php', 'vueHeader'=>'vues/generique/header.php', 'vueMenu'=>'vues/generique/menu.php', 'vueBandeauLogo'=>'vues/generique/bandeau.php', 'vueFooter'=>'vues/generique/footer.php'); $Config['class'] = array('Connexion'=>'class/classConnexion.php', 'Membres'=>'class/classMembres.php'); $Config['actions'] = array('tryInscrire'=>'modeles/accueil_non_connecter/inscription.php', 'tryConnecter'=>'modeles/accueil_non_connecter/connexion.php'); $Config['liste_actions'] = array('tryInscrire'=>'tryInscrire', 'tryConnecter'=>'tryConnecter', 'accueil'=>'accueil',); ?>
Il manque surement des informations sur le code, pour sa compréhension mais dans l'idée, comment récupérer les données en fonction de l'action dans l'url, mais afficher également les vues au bon moment ? Car là j'incluerais bien le code de l'action, puis en suivant la vue, mais je trouve ca étonnant ...
Quelqu'un aurait un exemple MVC très clair, sans complication ? J'ai déjà passer en revu les tutos de developpez, notamment :
http://tahe.developpez.com/web/php/mvc/?page=controleur
Mais je le trouve quand même pas très clair pour débuter en MVC.
Merci d'avance
Partager