Site Web avec PHP et MySQL
Organiser son code selon l'architecture MVC
Mod?le - Vue - Contr?leur
Mod?le : cette partie g?re les donn?es de votre site. On y trouve donc les requ?tes SQL.
Code PHP :
<?php function get_billets($offset, $limit) { global $bdd; $offset = (int) $offset; $limit = (int) $limit; $req = $bdd->prepare('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y ? %Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT :offset, :limit'); $req->bindParam(':offset', $offset, PDO::PARAM_INT); $req->bindParam(':limit', $limit, PDO::PARAM_INT); $req->execute(); $billets = $req->fetchAll(); return $billets; }
Contr?leur : cette partie g?re la logique du code qui prend des d?cisions. Le contr?leur va demander au mod?le les donn?es, les analyser, prendre des d?cisions et renvoyer le texte ? afficher ? la vue. Le contr?leur contient exclusivement du PHP.
Code PHP :
<?php // On demande les 5 derniers billets (mod?le) include_once('modele/blog/get_billets.php'); $billets = get_billets(0, 5); // On effectue du traitement sur les donn?es (contr?leur) // Ici, on doit surtout s?curiser l'affichage foreach($billets as $cle => $billet) { $billets[$cle]['titre'] = htmlspecialchars($billet['titre']); $billets[$cle]['contenu'] = nl2br(htmlspecialchars($billet['contenu'])); } // On affiche la page (vue) include_once('vue/blog/index.php');
Vue : cette partie se concentre sur l'affichage. On y trouve essentiellement du code HTML mais aussi quelques boucles et conditions PHP tr?s simples.
Code PHP :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Mon blog</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="vue/blog/style.css" rel="stylesheet" type="text/css" /> </head> <body> <h1>Mon super blog !</h1> <p>Derniers billets du blog :</p> <?php foreach($billets as $billet) { ?> <div class="news"> <h3> <?php echo $billet['titre']; ?> <em>le <?php echo $billet['date_creation_fr']; ?></em> </h3> <p> <?php echo $billet['contenu']; ?> <br /> <em><a href="commentaires.php?billet=<?php echo $billet['id']; ?>">Commentaires</a></em> </p> </div> <?php } ?> </body> </html>
Le contr?leur global du blog
Son r?le sera essentiellement de traiter les param?tres $_GET et d'appeler le contr?leur correspondant en fonction de la page demand?e. On peut aussi profiter de ce point ? central ? pour cr?er la connexion ? la base de donn?es.
Code PHP :
<?php include_once('modele/connexion_sql.php'); if (!isset($_GET['section']) OR $_GET['section'] == 'index') { include_once('controleur/blog/index.php'); }
Vous noterez que ce fichier PHP ne contient pas la balise de fermeture ?>. Celle-ci n'est en effet pas obligatoire, comme je vous l'ai dit plus t?t dans le cours. Je vous recommande de ne pas l'?crire surtout dans le mod?le et le contr?leur d'une architecture MVC. Cela permet d'?viter de f?cheux probl?mes li?s ? l'envoi de HTML avant l'utilisation de fonctions comme setCookie qui n?cessitent d'?tre appel?es avant tout code HTML.