Architecture MVC
1
Cadre du travail
Site web : gestion des fournisseurs
Les modules du site :
▪ fournisseurs
▪ produits
▪ Etc..
Travail demandé : On s’interesse au module gestion des
fournisseur. On vous demande de créer une page qui affiche tous
les fournisseurs
Nom de la base de données : « bd_fournisseurs » :
extrait de la base de données :
T_Founisseurs (FR_ID, FR_RaisonSociale, FR_Adresse,
FR_Tel)
T_Produits(PRD_ID,PRD_Libelle, PRD_Prix #FR_ID)
Page : index.php
⚫ Voici le code source PHP de la page principale index.php de notre sites
<!doctype html> <html lang="fr">
<head> <meta charset="UTF-8" />
<link rel="stylesheet" href="style.css" />
<title>Les fournisseurs</title>
</head> <body>
<div id="global">
<header> <a href="index.php"> <h1 id="titreFournisseur">Les fournisseurs</h1></a>
<p>Bienvenue sur cette page.</p> </header>
<div id="contenu">
<?php // Connexion à la base de données
$bdd = new PDO('mysql:host=localhost;dbname=bd_fournisseur, 'root', '');
// On récupère les fournisseurs
$res = $bdd->query('select * from T_Fournisseurs ');
$fournisseurs =$res->fetchAll();
foreach ($fournisseurs as $fournisseur) ?>
<h1> <?php echo $fournisseur[' FR_RaisonSociale '] ?></h1>
<p> <?php echo $fournisseur[' FR_Adresse '] ?></BR> <?php echo $fournisseur[' FR_Tel ']
?></p>
<em><a href="produits.php?fr_id=<?php echo $fournisseur[‘FR_ID’]; ?>">Les produits
</a></em> <?php } ?>
</div> <!-- #contenu -->
<footer id="piedpage"> page réalisée avec PHP, HTML5 et CSS. </footer>
</div> <!-- #global --> </body> </html>
Critique de l’existant Introduction au PHP
Les principaux défauts de cette page Web sont les suivants :
elle mélange balises HTML et code PHP ;
La page Web actuelle mélange code de présentation (les balises HTML) et accès
aux données (requêtes SQL)
La page Web actuelle mélange code de présentation (les balises HTML) et accès
aux données (requêtes SQL)
sa structure est monobloc, ce qui rend sa réutilisation et son évolution difficile.
Solution :
Organiser le code selon une architecture MVC
4
MVC= Modèle - Vue – Contrôleur
Modèle : représente la partie de l’application qui exécute la logique métier.
▪ récupérer les informations « brutes » dans la base de données,
▪ organise et assemble les données récupérées pour qu'elles puissent ensuite être traitées par le contrôleur.
▪ contient des requêtes SQL.
Vue : retourne une présentation des données venant du model.
▪ Elle ne fait aucun calcul
▪ récupère des variables pour savoir ce qu'elle doit afficher.
▪ Elle contient
▪ du code HTML
▪ quelques boucles et conditions PHP très simples, pour afficher par exemple la liste des
billets.
Contrôleur : cette partie gère la logique du code qui prend
des décisions.
▪ Intermédiaire entre le modèle et la vue
▪ demande au modèle les données, les analyse, prend des décisions et renvoi le texte à
afficher à la vue.
▪ il contient exclusivement du PHP.
▪ détermine si le visiteur a le droit de voir la page ou non (gestion des droits d'accès).
⚫ Échange d'informations entre les éléments
2
3
1 4
1. Le contrôleur reçoit la requête du visiteur
2. demande les données au modèle sans se soucier de la façon dont celui-ci va les
récupérer
3. Le modèle traduit cette demande en une requête SQL, récupère les informations et les
renvoie au contrôleur.
4. Le contrôleur transmet les données récupérées à la vue
5. La vue se charge d’afficher les données
⚫ À la racine de votre site, créer trois répertoires :
⚫ modele ;
⚫ vue ;
⚫ controleur.
⚫ Dans chacun d'eux créer un sous-répertoire pour chaque
« module » de votre site : fournisseurs, produits, etc.
⚫ créez un répertoire fournisseurs dans chacun de ces dossiers.
⚫ On aura ainsi l'architecture suivante :
⚫ modele/ fournisseurs : contient les fichiers gérant l'accès à la base
de données ;
⚫ vue/ fournisseurs : contient les fichiers gérant l'affichage des
fournisseurs ;
⚫ controleur/ fournisseurs : contient les fichiers contrôlant
fonctionnement module fournisseurs.
Le modèle
⚫ créer le fichier« get_fournisseurs.php » sous
« modele/fournisseurs »
<?php // Renvoie la liste de tous les billets, triés par identifiant
décroissant
function get_fournisseurs()
{
$bdd = new PDO('mysql:host=localhost;dbname=bd_fournisseurs',
'root', '');
$res = $bdd->query('select *from T_Fournisseurs’);
$fournisseurs=$res->fetchAll();
return $fournisseurs;
}
Le contrôleur Introduction au PHP
• créer le fichier« controle.php » sous « controleur/fournisseurs »
<?php
// On demande les fournisseurs (modèle)
include_once('modele/fournisseurs/get_fournisseurs.php');
$billets = get_fournisseurs();
// On affiche la page (vue)
include_once('vue/fournisseurs/index.php');
9
La vue
⚫ Créer un fichier « index.php » sous « vue/fournisseurs »
<!doctype html> <html lang="fr">
<head> <meta charset="UTF-8" />
<link rel="stylesheet" href="style.css" />
<title>Les fournisseurs</title>
</head> <body>
<div id="global">
<header> <a href="index.php"> <h1 id="titreFournisseur">Les fournisseurs</h1></a>
<p>Bienvenue sur cette page.</p> </header>
<div id="contenu">
<?php include_once('controller\fournisseurs\controle.php');
foreach ($billets as $fournisseur){ ?>
<h1> <?php echo $fournisseur['Fr_RaisonSociale'] ;?></h1>
<p> <?php echo $fournisseur['Fr_Adresse']; ?></BR> <?php echo $fournisseur['Fr_Tel']; ?>
<em><a href="produits.php?fr_id=<?php echo $fournisseur[‘FR_ID’]; ?>">Les produits
</a></em> <?php } ?>
</div> <!-- #contenu -->
<footer id="piedpage"> page réalisée avec PHP, HTML5 et CSS. </footer>
</div> <!-- #global --> </body> </html>
⚫ Un framework est un ensemble de bibliothèques, une sorte
de kit prêt à l'emploi pour créer plus rapidement son site web,
tout en respectant des règles de qualité.
⚫ Un framework est un assemblage de bibliothèques complètes
et puissantes.
⚫ Exemple de framework:
⚫ CakePHP ;
- Symfony ;
⚫ Jelix ;.
⚫ Zend Framework.
A retenir
⚫ MVC est un design pattern, une bonne pratique de
programmation qui recommande de découper son code en
trois parties qui gèrent les éléments suivants :
⚫ Modèle : stockage des données ;
⚫ Vue : affichage de la page ;
⚫ Contrôleur : logique, calculs et décisions.
⚫ Utiliser l'architecture MVC sur son site web, permet d'avoir
un code plus facile à maintenir et à faire évoluer.
⚫ De nombreux frameworks PHP, tels que Symfony et le Zend
Framework, permettent de mettre rapidement en place les
bases d'une architecture MVC sur votre site.