Chapitre 1Projet SunuLearn

Le routing — les URLs de l'application

Routes GET/POST, paramètres, groupes et nommage

Concepts Théoriques

Quand un visiteur tape https://sunulearn.com/formations dans son navigateur, Laravel doit savoir quoi faire avec cette URL. C'est le rôle du routeur : il associe chaque URL à un morceau de code qui génère la réponse (une page HTML, une redirection, du JSON).

Le routing est la porte d'entrée de votre application. Sans routes, Laravel ne sait pas quoi afficher.

Où définir les routes

Laravel a deux fichiers de routes :

  • routes/web.php — pour les pages HTML (avec sessions, cookies, CSRF). C'est là que vous travaillerez principalement.
  • routes/api.php — pour les endpoints JSON (API REST). On l'utilisera au chapitre 13.

Route simple — GET

// routes/web.php
Route::get('/formations', function () {
    return 'Liste des formations';
});

Quand quelqu'un visite /formations, Laravel exécute la fonction et retourne le texte. C'est la route la plus simple possible.

Les méthodes HTTP

Chaque route correspond à une méthode HTTP :

  • GET — lire/afficher (pages, formulaires vides)
  • POST — créer (soumettre un formulaire)
  • PUT/PATCH — modifier (mettre à jour une ressource)
  • DELETE — supprimer
Route::get('/formations', ...);          // Afficher la liste
Route::get('/formations/create', ...);   // Afficher le formulaire de création
Route::post('/formations', ...);         // Traiter la soumission du formulaire
Route::get('/formations/{id}', ...);     // Afficher une formation
Route::put('/formations/{id}', ...);     // Mettre à jour une formation
Route::delete('/formations/{id}', ...);  // Supprimer une formation

Paramètres d'URL

Les accolades {} capturent une partie variable de l'URL :

Route::get('/formations/{slug}', function (string $slug) {
    return "Formation : " . $slug;
});
// /formations/html-css-javascript → "Formation : html-css-javascript"
// /formations/laravel-12          → "Formation : laravel-12"

Paramètre optionnel avec ? et valeur par défaut :

Route::get('/formations/{category?}', function (string $category = 'all') {
    return "Catégorie : " . $category;
});

Routes nommées

Donner un nom à une route permet de la référencer sans copier l'URL :

Route::get('/formations', ...)->name('formations.index');
Route::get('/formations/{slug}', ...)->name('formations.show');

Dans Blade : <a href="{{ route('formations.index') }}">. Si l'URL change un jour, vous modifiez seulement la route — pas tous les liens dans vos vues.

Groupes de routes

Regrouper les routes qui partagent un préfixe ou un middleware :

Route::prefix('admin')->middleware('auth')->group(function () {
    Route::get('/formations', ...)->name('admin.formations.index');
    Route::get('/formations/create', ...)->name('admin.formations.create');
});
// Génère : /admin/formations et /admin/formations/create
// Toutes protégées par l'authentification

Retourner une vue Blade

En pratique, on retourne rarement du texte brut. On retourne une vue :

Route::get('/', function () {
    return view('home');
});
// Cherche le fichier resources/views/home.blade.php

On peut passer des données à la vue :

Route::get('/formations', function () {
    $formations = ['HTML/CSS/JS', 'PHP', 'Laravel', 'SQL'];
    return view('formations.index', ['formations' => $formations]);
});