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

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 formulaire
  • POST /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.