Tp 7 php framework mvc blogpoo
Thème :
Junior
1 vues ·12/12 leçons11 — 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 :
- Pourquoi le Front Controller : un seul point d’entrée pour tout contrôler.
- Pourquoi le Routing : décorréler l’URL de la structure des fichiers.
- Pourquoi les Contrôleurs : séparer la logique métier de l’affichage.
- Pourquoi le Renderer : réutiliser les layouts sans duplication.
- Pourquoi l’Autoloading PSR-4 : supprimer les
require_oncemanuels. - Pourquoi
.env: ne jamais mettre de secrets dans le code source. - 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.