Chapitre 13Projet DevBlog

Architecture MVC — Organiser comme un framework

Models, Views, Controllers et routeur simple

Concepts Théoriques

Jusqu'ici, chaque page PHP fait tout : récupérer les données, les traiter, et les afficher. Ça fonctionne pour un petit projet, mais ça devient ingérable quand le projet grandit. L'architecture MVC (Model-View-Controller) sépare ces responsabilités.

Le pattern MVC

Model — Gère les données et la logique métier. C'est lui qui parle à la base de données (SELECT, INSERT, UPDATE, DELETE). Il ne sait rien de l'affichage.

View — Gère l'affichage. Du HTML avec des variables PHP. La vue ne fait pas de requête SQL et ne traite pas de formulaire.

Controller — Le chef d'orchestre. Il reçoit la requête, appelle le Model pour les données, puis passe ces données à la View pour l'affichage.

Le flux d'une requête MVC :

  1. L'utilisateur visite /articles
  2. Le routeur identifie le contrôleur et la méthode à appeler
  3. Le Controller appelle le Model : $articles = Article::getAll()
  4. Le Model exécute la requête SQL et retourne les résultats
  5. Le Controller passe les données à la Vue : render('articles/index', ['articles' => $articles])
  6. La Vue affiche le HTML avec les données

Pourquoi MVC ?

  1. Séparation des responsabilités — Chaque fichier a UN seul rôle
  2. Réutilisabilité — Le même Model peut être utilisé par plusieurs Controller
  3. Testabilité — Vous pouvez tester la logique sans l'affichage
  4. Maintenabilité — Modifier le design ne touche pas la logique métier

C'est EXACTEMENT ce que Laravel fait — mais avec beaucoup plus d'automatismes (ORM Eloquent au lieu de PDO, Blade au lieu de PHP brut, routeur avancé, etc.).

Un routeur simple

Le routeur analyse l'URL et appelle le bon contrôleur. Pour DevBlog, un routeur basique avec un switch suffit :

L'URL /articles appelle ArticleController->index() L'URL /articles/mon-slug appelle ArticleController->show($slug) L'URL /admin/articles/create appelle AdminController->create()

Structure MVC de DevBlog

Les fichiers sont organisés en dossiers par rôle :

  • models/ — Article.php, Category.php, User.php, Comment.php
  • controllers/ — ArticleController.php, AuthController.php, AdminController.php
  • views/ — articles/index.php, articles/show.php, admin/dashboard.php, layouts/main.php

> Important : Ce chapitre prépare directement à Laravel. Les concepts sont les mêmes — seule la syntaxe change. Un Model PHP devient un Model Eloquent, une vue PHP devient un template Blade, un contrôleur reste un contrôleur.