Cet article est la suite de : Projet : Réalisation d’une galerie photo avec Laravel 12 – Partie 1 – Blade templates.
Maintenant que nous avons une belle structure de page grâce à notre composant Blade, il faut bien que les utilisateurs puissent y accéder ! C’est là qu’interviennent les routes.
Pense aux routes comme au standard téléphonique ou au GPS de ton site. Elles écoutent les requêtes des visiteurs (par exemple, monsite.com/contact) et décident quoi faire : afficher une vue, exécuter une fonction dans un contrôleur, etc.
Toute la magie se passe principalement dans un seul fichier : routes/web.php.

Route Simple : Afficher une Page Statique
Commençons par le plus simple : créer une page « À Propos ». Nous voulons que lorsque quelqu’un visite l’URL /a-propos, Laravel lui montre une vue correspondante.
Ouvrons le fichier routes/web.php et ajoutons cette ligne :
use Illuminate\Support\Facades\Route;
// La route pour la page d'accueil est souvent déjà là
Route::get('/', function () {
return view('welcome');
});
// Ajoutons notre nouvelle route pour la page "À Propos"
Route::get('/a-propos', function () {
// Créez ensuite le fichier de vue dans resources/views/pages/about.blade.php
return view('pages.about');
});
Créez ensuite le fichier de vue dans resources/views/pages/about.blade.php comme nous l’avons vu ici : Projet : Réalisation d’une galerie photo avec Laravel 12 – Partie 1 – Blade templates.
C’est tout ! Nous disons à Laravel : « Quand tu reçois une requête GET pour l’URL /a-propos, exécute cette fonction qui se contente de retourner la vue pages.about« .
Concept Clé :
Route::get()etview()
Route::get(): C’est la méthode la plus courante. Elle répond aux visites « normales » d’une page, lorsque vous tapez une URL dans votre navigateur.view('nom-de-la-vue'): C’est une fonction d’aide (un « helper ») de Laravel qui récupère un fichier Blade dansresources/viewset le renvoie au navigateur. Notez qu’on utilise des points.pour naviguer dans les dossiers.
La Bonne Pratique : Route vers un Contrôleur pour des pages dynamiques
Mettre la logique directement dans le fichier de routes, c’est bien pour des cas très simples. Mais pour garder notre code propre et organisé, nous allons plutôt diriger nos routes vers des Contrôleurs.
Un contrôleur est une classe PHP qui regroupe la logique liée à une partie de votre site (les articles, les galeries, etc.). C’est le chef d’orchestre.
- Créons un contrôleur pour nos pages statiques avec Artisan :
php artisan make:controller PageControllerCette commande crée un nouveau fichier dans app/Http/Controllers/PageController.php
- Modifions notre route pour qu’elle utilise ce contrôleur. Dans
routes/web.php:
use App\Http\Controllers\PageController; // N'oubliez pas d'importer la classe !Route::get('/contact', [PageController::class, 'contact']);
- Créons la méthode
contactdans lePageController
// Dans app/Http/Controllers/PageController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request;
class PageController extends Controller {
public function contact() {
// Ici, on pourrait avoir de la logique : récupérer des infos, etc.
return view('pages.contact');
}
}Routes Dynamiques : Afficher une Galerie Spécifique
Notre site doit afficher plusieurs galeries. On ne va pas créer une route pour chaque ! On a besoin d’une route « modèle » qui s’adapte. C’est une route avec un paramètre. Toujours dans le fichier routes/web.php.
use App\Http\Controllers\GalleryController; // On imagine avoir créé ce contrôleur
// Le {slug} est un paramètre dynamique
Route::get('/galeries/{slug}', [GalleryController::class, 'show']);
- Les accolades
{}indiquent à Laravel que cette partie de l’URL est variable. On l’appelle souventslug(un identifiant textuel simple, comme « photos-de-mariage ») ouid. - Lorsque quelqu’un visitera
/galeries/photos-de-mariage, Laravel saura qu’il doit appeler la méthodeshowduGalleryControlleret lui passer la valeur"photos-de-mariage".
La méthode dans le contrôleur ressemblerait à ça :
// Dans app/Http/Controllers/GalleryController.php
public function show(string $slug)
{
// On utilisera ce $slug pour retrouver la bonne galerie dans la base de données
// et on passera les informations de la galerie à la vue.
// Nous verrons ça dans le prochain chapitre !
return view('galleries.show', [
'slug' => $slug // On envoie le slug à la vue pour l'afficher
]);
}
Nommer ses Routes
Imagine que tu dois changer l’URL /a-propos en /a-propos-de-nous. Tu devrais chercher et remplacer ce lien dans tous tes fichiers ! C’est une mauvaise idée.
La solution est de nommer tes routes.
// Dans routes/web.php
Route::get('/a-propos-de-nous', [PageController::class, 'about'])->name('about');Maintenant, dans tes fichiers Blade, tu n’utilise plus jamais l’URL en dur. Tu utiliseras le nom de la route avec le helper route()
<a href="{{ route('about') }}">À Propos</a>L’avantage ? Si tu décide de changer l’URL en /qui-sommes-nous, tu n’auras qu’à modifier la ligne dans le fichier routes/web.php. Tous tes liens fonctionneront encore parfaitement !
Les groupes et sous-domaines
Les groupes de routes permettent de déclarer une listes de routes en évitant de répéter une partie, admin par exemple :
Route::prefix('admin')->group(function() {
Route::get('users', function () { /* ... */ });
Route::get('users/{id}', function () { /* ... */ });
Route::get('users/create', function () { /* ... */ });
});On peut aussi créer des sous-groupes.
Pour des sites avec sous-domaines :
Route::domain('{lang}.domain.com')->group(function() {
/* ... */
});Et voilà ! Tu sais maintenant comment diriger les visiteurs vers les bonnes pages, que ce soit de manière statique ou dynamique. C’est la fondation sur laquelle nous allons construire toute la logique de notre galerie.
Pour notre projet, le fichier routes/web.php devrait ressembler à cela :
<?php
use App\Http\Controllers\GalleryController;
use App\Http\Controllers\PageController;
use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;
// Pages statiques
Route::get('/', [PageController::class, 'home'])->name('home');
Route::get('/a-propos', [PageController::class, 'pages.about'])->name('about');
Route::get('/contact', [PageController::class, 'pages.contact'])->name('contact');
// Blog
Route::get('/blog/{slug}', [ArticleController::class, 'index'])->name('posts.index');
// Galerie
Route::get('/gallery/{slug}', [GalleryController::class, 'index'])->name('galleries.index');Dans la prochaine partie, nous allons enfin parler des bases de données avec Eloquent, le magnifique ORM de Laravel, pour donner vie à nos galeries et à nos articles.
Résumé
Pour des pages statiques simples :
Route::get('/a-propos', function () {
return view('pages.about');
})->name('about');Pour des pages dynamiques avec un contrôleur :
php artisan make:controller PageController # Dans app/Http/Controllers/PageController.phpuse App\Http\Controllers\PageController;Route::get('/contact', [PageController::class, 'pages.contact'])->name('contact');
Pour des routes dynamiques :
Route::get('/galerie/{slug}', [GalleryController::class, 'index'])->name('galleries.index');