Articles - PHP

Site Web avec PHP et MySQL

  |   18025  |  PHP
Sommaire :

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.



Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
Licence Creative Commons