Médiaforma

All posts tagged mvc

La vue est responsable de l’affichage des données sur l’écran. Définissez le fichier vue\resultats.php et insérez les instructions suivantes dans ce fichier :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Accès à la table orders de la bdd Northwind avec PDO</title>
    <style>
      th { padding-right: 30px;}
    </style>
  </head>
  <body>
      <?php
      echo "<table border><tr><th>OrderID</th><th>Customer</th><th>Employee</th><th>OrderDate</th><th>RequiredDate</th><th>ShippedDate</th><th>ShipVia</th>
      <th>Freight</th><th>ShipName</th><th>ShipAddress</th><th>ShipCity</th><th>ShipPostalCode</th><th>ShipCountry</th></tr>";
        foreach($donnees as $ligne){
          echo "<tr>";
          for ($i=0; $i<13; $i++)
            echo "<td>".$ligne[$i]."</td>";
          echo "</tr>";
        }
        echo "</table>";
      ?>
  </body>
</html>

Ce code n’a rien de bien compliqué : il affiche le contenu du tableau $donnees dans un tableau HTML.

Il ne vous reste plus qu’à invoquer le contrôleur avec des URL du type suivant :

http://localhost/MVC/controleur/index.php?tri=valeur

Où valeur représente un nombre compris entre 0 et 11, pour indiquer le champ selon lequel les données seront triées. Voici le résultat pour un tri sur le champ Customer :

Frameworks MVC

Pour développer des projets selon une architecture MVC, vous pouvez créer tous les fichiers manuellement, comme nous venons de le faire, ou vous simplifier la tâche en utilisant un framework dédié, comme par exemple Zend Framework, CakePHP, Symfony ou Jelix.


C’est autour du contrôleur que s’articule tout le code. Voici les actions accomplies :

  • récupération du paramètre dans l’URL ;
  • demande de données au modèle, en fonction du paramètre récupéré dans l’URL ;
  • mise en gras de la colonne triée ;
  • demande à la vue d’afficher les résultats.

Créez le fichier index.php dans le dossier MVC\controleur et insérez les instructions suivantes dans ce fichier :

<?php
  $tri = $_GET['tri'];
  include_once("../modele/trier.php");

  // Modèle
  // Demande de données au modèle
  $donnees = trier($tri);

  // Contrôleur
  // Mise en gras de la colonne triée
  foreach($donnees as &$ligne){
    $ligne[$tri] = "<b><i>".$ligne[$tri]."</i></b>";
  }

  // Vue
  // Affichage des résultats
  include_once('../vue/resultat.php');

?>

Après avoir récupéré le paramètre tri dans l’URL et l’avoir mémorisé dans la variable $tri :

$tri = $_GET['tri'];

Le fichier modèle/tri.php est inclus dans le code :

include_once("../modele/trier.php");

Les données sont alors extraites de la base de données avec la fonction tri() du modèle :

$donnees = trier($tri);

Pour bien discerner le champ qui a été trié, on le met en gras avec une boucle foreach. Remarquez l’accès par référence aux données (&$ligne). Ainsi, il sera possible de modifier les données du tableau donnees de façon durable et pas seulement à l’intérieur de la boucle foreach :

foreach($donnees as &$ligne){
  $ligne[$tri] = "<b><i>".$ligne[$tri]."</i></b>";
}

Enfin, les données triées sont affichées en incluant le fichier vue/resultat.php dans le code :

include_once('../vue/resultat.php');

La partie modèle du projet va récupérer les données dans la base de données MySQL et les retourner au contrôleur. Définissez le fichier trier.php dans le dossier MVC\modèle et insérez les instructions suivantes dans ce fichier.

<?php
  function trier($champ) {
    $nomchamp=array("OrderID", "Customer", "Employee", "OrderDate", "RequiredDate", "ShippedDate", "ShipVia", "Freight", "ShipName", "ShipAddress", "ShipCity", "ShipPostalCode", "ShipCountry");
    try {
      $base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');
    }
    catch(exception $e) {
      die('Erreur '.$e->getMessage());
    }
    $base->exec("SET CHARACTER SET utf8");
    $retour = $base->query("SELECT * FROM orders ORDER BY ".$nomchamp[$champ]);
    $data = $retour->fetchAll();
    return $data;
  }
?>

Comme vous pouvez le voir, le fichier trier.php contient une seule fonction nommée trier(). Cette fonction admet un paramètre : l’index du champ sur lequel les données doivent être triées.

Le code est extrêmement simple.

Dans un premier temps, on définit le tableau $nomchamp qui contient le nom des champs de la table orders. Cette étape est nécessaire, car il faudra spécifier le nom du champ selon lequel les données doivent être triées dans la requête SQL.

Le code définit alors un accès PDO à la base de données northwind :

$base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');

Les données sont lues selon l’encodage UTF-8 :

$base->exec("SET CHARACTER SET utf8");

La requête SQL obtient toutes les données de la table orders, classées selon le champ passé en paramètre de la fonction :

$retour = $base->query("SELECT * FROM orders ORDER BY ".$nomchamp[$champ]);

Le résultat de la requête est stocké dans le tableau $data et retourné à l’appelant :

$data = $retour->fetchAll();
return $data;

A titre d’exemple, vous allez développer un projet qui interroge de façon paramétrable la table orders de la base de données northwind. Le but recherché est d’afficher le contenu de la table orders, classée selon un de ses champs, en fonction du paramètre passé dans l’URL :

  • index.php?tri=0 classe les données par ordre alphabétique sur le premier champ ;
  • index.php?tri=1 classe les données par ordre alphabétique sur le deuxième champ ;
  • etc.

Création de l’arborescence

Commencez par créer un dossier intitulé MVC dans le dossier c:\wamp\www. Définissez les sous-dossiers modele, vue et controleur dans le dossier MVC :


Dans des projets de grande envergure, il est important de bien structurer le code PHP pour faciliter sa maintenabilité. L’architecture MVC apporte une réponse élégante à cette problématique.

Qu’est-ce que MVC et pourquoi l’utiliser ?

MVC est un design pattern (un modèle de conception) qui permet d’organiser son code selon trois parties bien précises : Modèle, Vue et Contrôleur. En suivant les directives du modèle MVC, vous saurez quels fichiers créer et quels rôles leur donner :

  • Modèle : Cette partie gère les données du site. Elle récupère les données dans la base de données (via des requêtes SQL) et les met en forme pour qu’elles puissent être traitées par la partie Contrôleur.
  • Vue : Cette partie est dédiée à l’affichage sur l’écran. Elle est généralement composée d’un mélange de code HTML et PHP.
  • Contrôleur : Cette partie contient la portion “intelligente” du code. Elle reçoit les données du visiteur, demande au Modèle de trouver les données correspondantes dans la base de données, analyse les données fournies par le Modèle et décide ce qui doit être affiché par la partie Vue.