TP MVC
TP MVC
TP MVC
et de la Promotion du Travail
Filière : DD TC
Module :Sites web dynamiques
Formation : Initiale TP : MVC
1. Introduire le MVC :
En utilisant le modèle MVC, vous séparez les préoccupations et maintenez une meilleure organisation du code.
Cela facilite la compréhension, la modification et l'extension de l'application. Par exemple, si vous souhaitez
modifier l'interface utilisateur, vous pouvez le faire sans toucher au modèle ou à la logique métier.
Chaque composant du modèle MVC a un rôle spécifique et interagit avec les autres de manière structurée. Cette
séparation des responsabilités permet de développer des applications évolutives, maintenables et testables.
2. Exemple pratique en PHP :
Dans cet exemple nous allons créer une app MVC pour le gestion d’une ressource Etablissement
(id,nom,ville,adresse).
a. Structure du projet :
b. Database.php :
<?php
class Database {
private $host = 'localhost';
private $db_name = 'tp_mvc';
private $username = 'root';
private $password = '';
private $conn;
public function connect() {
$this->conn = null;
try {
$this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this-
>db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'Erreur de connexion à la base de données : ' . $e->getMessage();
}
return $this->conn;
}
}
c. Le model:
<?php
require_once 'database.php';
class Etablissement {
private $id;
private $nom;
private $ville;
private $adresse;
// Constructeur
public function __construct($id, $nom, $ville, $adresse) {
$this->id = $id;
$this->nom = $nom;
$this->ville = $ville;
$this->adresse = $adresse;
}
// Getters
public function getId() {
return $this->id;
}
// Setters
public function setId($id) {
$this->id = $id;
}
d. Le contrôleur :
Un contrôleur est une classe qui gère les actions et les interactions entre les modèles (données) et les vues (affichage). Il est
responsable de la logique métier de l'application et prend en charge le traitement des demandes utilisateur.
<?php
class EtablissementController {
// Action index pour afficher la liste
public function index() {
$etablissements = Etablissement::getAll();
// Charge la vue index.php avec les données $etablissements
require 'views/etablissement/index.php';
}
public function create() {
// Afficher la vue contenant le formulaire d'ajout
require 'views/etablissement/create.php';
}
public function store() {
// Ajouter un etab a la bd
$nom = htmlspecialchars($_POST['nom']);
$ville = htmlspecialchars($_POST['ville']);
$adresse = htmlspecialchars($_POST['adresse']);
// Effectuer d'autres validations et vérifications ici
$id = Etablissement::create($nom, $ville, $adresse);
// Redirige vers la page index
header('Location: index.php');
exit();
}
<!DOCTYPE html>
<html>
<head>
<title>Liste des établissements</title>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h3>Gestion des établissements</h3>
<a href="index.php?action=create" class="btn btn-primary">Ajouter un
établissement</a>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Nom</th>
<th>Ville</th>
<th>Adresse</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($etablissements as $etablissement) { ?>
<tr>
<td><?php echo $etablissement['id']; ?></td>
<td><?php echo $etablissement['nom']; ?></td>
<td><?php echo $etablissement['ville']; ?></td>
<td><?php echo $etablissement['adresse']; ?></td>
<td>
<a href="index.php?action=edit&id=<?php echo $etablissement['id']; ?>"
class="btn btn-primary">Modifier</a>
<a href="#" class="btn btn-danger" onclick="confirmDelete(<?php echo
$etablissement['id']; ?>)">Supprimer</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<script>
function confirmDelete(id) {
if (confirm("Êtes-vous sûr de vouloir supprimer cet établissement ?")) {
window.location.href = "index.php?action=delete&id=" + id;
}
}
</script>
</body>
</html>
Views/etablissement/create.php :
<!DOCTYPE html>
<html>
<head>
<title>Ajouter un établissement</title>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Ajouter un établissement</h1>
<form method="post" action="index.php?action=store">
<div class="mb-3">
<label for="nom" class="form-label">Nom</label>
<input type="text" class="form-control" id="nom" name="nom" required>
</div>
<div class="mb-3">
<label for="ville" class="form-label">Ville</label>
<input type="text" class="form-control" id="ville" name="ville" required>
</div>
<div class="mb-3">
<label for="adresse" class="form-label">Adresse</label>
<input type="text" class="form-control" id="adresse" name="adresse" required>
</div>
<button type="submit" class="btn btn-primary">Ajouter</button>
</form>
</div>
</body>
</html>
Views/etablissement/edit.php:
<!DOCTYPE html>
<html>
<head>
<title>Modifier un établissement</title>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Modifier un établissement</h1>
<form method="post" action="index.php?action=update&id=<?php echo
$etablissement['id']; ?>">
<div class="mb-3">
<label for="nom" class="form-label">Nom</label>
<input type="text" class="form-control" id="nom" name="nom" value="<?php echo
$etablissement['nom']; ?>" required>
</div>
<div class="mb-3">
<label for="ville" class="form-label">Ville</label>
<input type="text" class="form-control" id="ville" name="ville" value="<?php
echo $etablissement['ville']; ?>"
required>
</div>
<div class="mb-3">
<label for="adresse" class="form-label">Adresse</label>
<input type="text" class="form-control" id="adresse" name="adresse" value="<?php
echo $etablissement['adresse']; ?>"
required>
</div>
<button type="submit" class="btn btn-primary">Modifier</button>
</form>
</div>
</body>
</html>
f. Index.php:
Le fichier index.php joue le rôle principal de point d'entrée de votre application. Il sert de routeur pour diriger les
requêtes vers les actions appropriées du contrôleur correspondant.
<?php
// Inclure le contrôleur et le modèle
require_once 'controllers/EtablissementController.php';
require_once 'models/Etablissement.php';
// Instancier le contrôleur
$controller = new EtablissementController();