Architecture MVC en PHP
Objectifs pédagogiques
- Comprendre la séparation des responsabilités en MVC.
- Organiser son code de manière modulaire et évolutive.
- Préparer l’application à une structure propre (ex. Laravel).
Définition du MVC
L'architecture MVC (Model - View - Controller) est une manière de structurer une application en trois couches principales :
| Couche | Rôle principal |
|---|---|
| Modèle (Model) | Accès et gestion des données (lecture/écriture en base de données) |
| Vue (View) | Présentation et affichage des données (HTML, JSON…) |
| Contrôleur (Controller) | Reçoit les requêtes, orchestre les appels au modèle et choisit la vue |
Le modèle ne contient pas la logique métier dans une séparation stricte. Cette dernière peut être placée dans une couche
Servicedans des architectures plus complexes.
Illustration avec un schéma
mermaid
graph TD
A["Requête HTTP"] --> B["Contrôleur"]
B --> C["Modèle (accès base de données)"]
C --> B
B --> D["Vue"]
D --> E["Réponse HTML"]Exemple minimal en PHP
Structure
/project-root/
│
├── index.php → Point d’entrée (router)
├── controllers/
│ └── TaskController.php
├── models/
│ └── Task.php
├── views/
│ └── task-list.php
└── data/
└── db.jsonContrôleur : TaskController.php
php
<?php
require_once __DIR__ . '/../models/Task.php';
class TaskController {
public function index(): void {
$tasks = Task::all();
require __DIR__ . '/../views/task-list.php';
}
}Modèle : Task.php
php
<?php
class Task {
public static function all(): array {
$json = file_get_contents(__DIR__ . '/../data/db.json');
return json_decode($json, true) ?? [];
}
}Vue : task-list.php
php
<ul>
<?php foreach ($tasks as $task): ?>
<li><?= htmlspecialchars($task['label']) ?></li>
<?php endforeach; ?>
</ul>Router (index.php)
php
<?php
require_once __DIR__ . '/controllers/TaskController.php';
$controller = new TaskController();
$controller->index();Avantages
- Lisibilité : chaque couche a une responsabilité claire.
- Modularité : les fichiers sont bien séparés.
- Testabilité : les modèles et contrôleurs peuvent être testés indépendamment.
- Préparation au framework Laravel ou à d’autres structures MVC.
À retenir
- Le Modèle : ne contient que l'accès aux données.
- Le Contrôleur : décide quoi faire selon la requête.
- La Vue : ne contient que l'affichage (aucune logique métier).
- MVC permet une séparation des responsabilités idéale pour les projets web structurés.