Tp 7 php framework mvc blogpoo
Thème :
Junior
1 vues ·12/12 leçons

11 — Architecture Complète : Vue d’ensemble du Framework MVC

Résumé de la transformation

Au début de ce cours, notre application était un ensemble de fichiers PHP procéduraux à la racine. Aujourd’hui, c’est un Framework MVC complet, structuré comme Laravel.

📂 Structure finale du projet

📦 php-blog-2026/                    ← Racine du projet (inaccessible du web)
│
├── 📄 server.php                    ← Routeur du serveur PHP intégré
├── 📄 composer.json                 ← Dépendances et scripts
├── 📄 .env                          ← Variables d'environnement (privé)
├── 📄 .gitignore                    ← Exclusions Git
│
├── 📂 app/                          ← Logique applicative (PSR-4 App\)
│   ├── 📄 Router.php                ← Classe de routing
│   ├── 📄 Renderer.php              ← Service de rendu des vues
│   ├── 📄 Http.php                  ← Service de redirections
│   ├── 📄 flash.php                 ← Système de messages flash
│   ├── 📄 helpers.php               ← Fonctions globales
│   ├── 📂 Controllers/              ← Contrôleurs MVC
│   │   ├── 📄 ArticleController.php
│   │   ├── 📄 AuthController.php
│   │   ├── 📄 UserController.php
│   │   ├── 📄 CommentController.php
│   │   └── 📄 AdminController.php
│   ├── 📂 Models/                   ← Modèles de données
│   ├── 📂 Enums/                    ← Énumérations PHP 8.1+
│   ├── 📂 Traits/                   ← Traits réutilisables
│   └── 📂 Interfaces/               ← Interfaces
│
├── 📂 database/                     ← Configuration base de données
│   └── 📄 database.php
│
├── 📂 resources/                    ← Assets et vues (sources)
│   ├── 📂 css/                      ← Fichiers CSS sources
│   └── 📂 views/                    ← Templates PHP
│       ├── 📂 layouts/              ← Mises en page globales
│       ├── 📂 blog/                 ← Vues publiques
│       ├── 📂 users/                ← Vues utilisateur
│       └── 📂 admin/                ← Vues administration
│
├── 📂 routes/                       ← Définition des URLs
│   └── 📄 web.php                   ← Toutes les routes web
│
├── 📂 storage/                      ← Fichiers uploadés
│   └── 📂 articles/                 ← Images des articles
│
├── 📂 public/                       ← Seul dossier accessible du web
│   ├── 📄 index.php                 ← Front Controller
│   ├── 📄 .htaccess                 ← Config Apache
│   └── 📂 publicAll/               ← Assets divers publics
│
└── 📂 vendor/                       ← Dépendances Composer (auto-générées)

🔄 Cycle de vie d’une requête

1. Navigateur → GET /admin-list-article.php
        ↓
2. server.php (si PHP intégré) ou .htaccess (si Apache)
   "Le fichier existe ?" → NON → Passer à index.php
        ↓
3. public/index.php
   - session_start()
   - chdir(racine du projet)
   - require 'app/helpers.php' → charge autoload, .env, DB
   - require 'routes/web.php' → crée le Router avec toutes les routes
   - $router->resolve()
        ↓
4. App\Router::resolve()
   - Extrait le chemin : /admin-list-article.php
   - Méthode : GET
   - Trouve l'action : [ArticleController::class, 'index']
        ↓
5. ArticleController::index()
   - checkAdmin() → vérifie session → OK
   - Récupère les données (Article::findAll())
   - Renderer::render('admin/articles/list-article', $data, 'admin-layout')
        ↓
6. App\Renderer::render()
   - extract($data) → crée les variables PHP
   - ob_start() + require vue → capture le HTML
   - require layout → injecte $pageContent dans le layout
        ↓
7. HTML complet envoyé au navigateur ✅

🔗 Tableau de correspondance avec Laravel

Concept Notre Blog Laravel
Point d’entrée public/index.php public/index.php
Serveur dev server.php + php -S php artisan serve
Configuration .env + vlucas/phpdotenv .env + vlucas/phpdotenv
Routeur App\Router Illuminate\Routing\Router
Définition routes routes/web.php routes/web.php
Contrôleurs app/Controllers/ app/Http/Controllers/
Modèles app/Models/ app/Models/
Vues resources/views/ resources/views/
Autoloading Composer PSR-4 App\ Composer PSR-4 App\
Rendu vues Renderer::render() view() + Blade
Redirections Http::redirect() redirect()
Flash messages flash_set() / flash_get() with('success', '...')
Protection routes checkAuth() Middleware auth
Uploads storage/articles/ storage/app/public/

🏆 Ce que vous avez appris

En construisant ce framework from scratch, vous avez compris :

  1. Pourquoi le Front Controller : un seul point d’entrée pour tout contrôler.
  2. Pourquoi le Routing : décorréler l’URL de la structure des fichiers.
  3. Pourquoi les Contrôleurs : séparer la logique métier de l’affichage.
  4. Pourquoi le Renderer : réutiliser les layouts sans duplication.
  5. Pourquoi l’Autoloading PSR-4 : supprimer les require_once manuels.
  6. Pourquoi .env : ne jamais mettre de secrets dans le code source.
  7. Pourquoi public/ : sécuriser le code source inaccessible du web.

Prochaine étape : Apprendre Laravel, c’est retrouver exactement ces mêmes concepts, mais avec plus d’outils, de conventions et de puissance. Vous n’apprenez pas Laravel depuis zéro, vous reconnaissez ce que vous avez déjà construit. 🚀

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 11 — Architecture Complète : Vue d'ensemble du Framework MVC. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.