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 :
- L'utilisateur visite /articles
- Le routeur identifie le contrôleur et la méthode à appeler
- Le Controller appelle le Model : $articles = Article::getAll()
- Le Model exécute la requête SQL et retourne les résultats
- Le Controller passe les données à la Vue : render('articles/index', ['articles' => $articles])
- La Vue affiche le HTML avec les données
Pourquoi MVC ?
- Séparation des responsabilités — Chaque fichier a UN seul rôle
- Réutilisabilité — Le même Model peut être utilisé par plusieurs Controller
- Testabilité — Vous pouvez tester la logique sans l'affichage
- 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.