Skip to content

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 :

CoucheRô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 Service dans 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.json

Contrô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.