04 — Le fichier routes/web.php : La carte des URLs
Définition
Le fichier routes/web.php est le registre centralisé de toutes les URLs de votre application. C’est ici qu’on définit quelle URL appelle quelle méthode de quel contrôleur.
🔗 Comparaison Laravel
C’est le fichier le plus “Laravel-like” de toute notre architecture. La syntaxe est presque identique.
Dans Laravel :
use App\Http\Controllers\ArticleController;
Route::get('/', [ArticleController::class, 'index']);
Route::post('/articles', [ArticleController::class, 'store']);
Dans notre blog :
use App\Controllers\ArticleController;
$router->get('/', [ArticleController::class, 'indexPublic']);
$router->post('/admin-add-article.php', [ArticleController::class, 'add']);
La seule différence : Route::get() vs $router->get(). En Laravel, Route est une Facade (un alias statique) qui appelle le routeur en arrière-plan.
📄 Notre fichier routes/web.php
<?php
declare(strict_types=1);
use App\Router;
use App\Controllers\ArticleController;
use App\Controllers\AuthController;
use App\Controllers\UserController;
use App\Controllers\CommentController;
use App\Controllers\AdminController;
$router = new Router();
// ─────────────────────────────────────────────
// 🌐 Routes Publiques
// ─────────────────────────────────────────────
$router->get('/', [ArticleController::class, 'indexPublic']);
$router->get('/user-article-show.php', [ArticleController::class, 'show']);
// ─────────────────────────────────────────────
// 🔐 Authentification
// ─────────────────────────────────────────────
$router->get('/login.php', [AuthController::class, 'login']);
$router->post('/login.php', [AuthController::class, 'login']);
$router->get('/register.php', [AuthController::class, 'register']);
$router->post('/register.php', [AuthController::class, 'register']);
$router->get('/logout.php', [AuthController::class, 'logout']);
// ─────────────────────────────────────────────
// 👤 Dashboard Utilisateur
// ─────────────────────────────────────────────
$router->get('/user-dashboard.php', [AuthController::class, 'dashboard']);
$router->get('/user-update.php', [UserController::class, 'update']);
$router->post('/user-update.php', [UserController::class, 'update']);
// ─────────────────────────────────────────────
// 💬 Commentaires
// ─────────────────────────────────────────────
$router->post('/user-comment-save.php', [CommentController::class, 'save']);
$router->get('/user-comment-delete.php', [CommentController::class, 'delete']);
// ─────────────────────────────────────────────
// 🛠️ Administration
// ─────────────────────────────────────────────
$router->get('/admin.php', [AdminController::class, 'index']);
$router->get('/admin-list-article.php', [ArticleController::class, 'index']);
$router->post('/admin-list-article.php', [ArticleController::class, 'index']);
$router->get('/admin-add-article.php', [ArticleController::class, 'add']);
$router->post('/admin-add-article.php', [ArticleController::class, 'add']);
$router->get('/admin-update-article.php', [ArticleController::class, 'edit']);
$router->post('/admin-update-article.php', [ArticleController::class, 'edit']);
$router->get('/admin-delete-article.php', [ArticleController::class, 'delete']);
// ─────────────────────────────────────────────
// 👥 Administration Membres
// ─────────────────────────────────────────────
$router->get('/admin-index-users.php', [UserController::class, 'index']);
$router->get('/admin-index-comments.php', [UserController::class, 'indexComments']);
return $router;
Analyse pas à pas
1. Les imports use
use App\Controllers\ArticleController;
Grâce à l’autoloading PSR-4 de Composer, on n’a plus besoin de require_once. On importe juste le nom de la classe.
2. L’instance $router
$router = new Router();
On crée une instance du routeur. Toutes les routes seront stockées dans cet objet.
3. La notation ::class
[ArticleController::class, 'indexPublic']
ArticleController::class est une syntaxe PHP qui retourne le nom complet de la classe sous forme de chaîne de caractères : "App\Controllers\ArticleController". C’est plus sûr que d’écrire la chaîne manuellement car l’IDE peut détecter les erreurs de frappe.
4. Routes GET vs POST pour la même URL
$router->get('/login.php', [AuthController::class, 'login']); // Afficher le formulaire
$router->post('/login.php', [AuthController::class, 'login']); // Traiter le formulaire
Une même URL peut avoir des routes différentes selon la méthode HTTP. C’est une pratique standard du web :
GET /login.php→ affiche le formulairePOST /login.php→ traite les données soumises
5. return $router
return $router;
Le fichier retourne l’instance configurée. Dans public/index.php :
$router = require_once 'routes/web.php';
Cela permet à index.php de récupérer le routeur avec toutes ses routes déjà enregistrées.
🔮 Vers les routes nommées (Laravel)
En Laravel, on peut nommer les routes :
Route::get('/login', [AuthController::class, 'login'])->name('login');
Et les appeler par leur nom :
return redirect()->route('login');
C’est une amélioration future possible pour notre routeur.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur 04 — Le fichier `routes/web.php` : La carte des URLs. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.