
Le routage : Gérer les URL de votre application
Apprenez à définir les routes dans Laravel, à passer des paramètres et à utiliser les routes nommées pour une gestion flexible et maintenable des URL de vos applications web.
Introduction au routage : le GPS de votre application Laravel
Le routage est l'un des concepts les plus fondamentaux lorsque l'on développe une application web avec Laravel. Il agit comme un système de navigation interne, interceptant les requêtes HTTP entrantes (les URL que les utilisateurs tapent dans leur navigateur ou les appels d'API) et les dirigeant vers la logique appropriée au sein de votre code. Sans un système de routage clair, votre application ne saurait comment répondre aux différentes sollicitations. Laravel offre un système de routage élégant, expressif et puissant, facilitant grandement la définition des points d'entrée de votre application.
Dans Laravel, la majorité des routes destinées à votre interface web sont définies dans le fichier routes/web.php. Ce fichier est le coeur de la gestion de vos URL. Chaque route associe une URI (Uniform Resource Identifier, la partie de l'URL après le nom de domaine) et une méthode HTTP (comme GET, POST, PUT, DELETE) à une action spécifique. Cette action peut être une simple fonction anonyme (closure) pour des tâches rapides, ou, plus communément et de manière recommandée pour des applications structurées, une méthode d'un contrôleur.
Comprendre le routage est essentiel car il détermine la structure de navigation de votre site, l'accessibilité de vos fonctionnalités et la manière dont les utilisateurs interagissent avec votre application. Une bonne gestion des routes contribue non seulement à la clarté du code mais aussi à l'expérience utilisateur et au référencement de votre site. Ce chapitre vous guidera à travers les aspects essentiels du routage dans Laravel, vous permettant de construire des fondations solides pour vos projets.
Définir des routes basiques : vos premières portes d'entrée
La création de routes dans Laravel est intuitive. Pour définir une route qui répond à une requête GET, vous utiliserez la façade Route et sa méthode get(). Cette méthode attend au minimum deux arguments : l'URI à laquelle la route doit répondre et une fonction (closure) ou une référence à une méthode de contrôleur qui exécutera la logique lorsque cette URI sera atteinte.
Par exemple, pour créer une page d'accueil simple qui affiche "Bonjour le monde !", vous pouvez ajouter la ligne suivante dans votre fichier routes/web.php :
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return 'Bonjour le monde !';
});De même, pour une page "A propos", vous pourriez avoir :
Route::get('/a-propos', function () {
return view('pages.about'); // Suppose que vous avez une vue 'about.blade.php' dans 'resources/views/pages'
});Laravel supporte nativement les verbes HTTP les plus courants. Outre Route::get(), vous utiliserez fréquemment :
Route::post('/url', $action): Pour les soumissions de formulaires ou la création de ressources.Route::put('/url/{id}', $action): Pour la mise à jour complète d'une ressource existante.Route::patch('/url/{id}', $action): Pour la mise à jour partielle d'une ressource existante.Route::delete('/url/{id}', $action): Pour la suppression d'une ressource.
Il existe aussi la méthode Route::match(['get', 'post'], '/url', $action) pour répondre à plusieurs verbes HTTP, ou Route::any('/url', $action) pour répondre à tous les verbes HTTP.
Passer des paramètres aux routes : dynamiser vos URL
Très souvent, vous aurez besoin de capturer des segments de l'URI au sein de votre route. Par exemple, pour afficher le profil d'un utilisateur en fonction de son identifiant, l'URL pourrait ressembler à /utilisateurs/1. Laravel permet de définir des paramètres de route pour capturer ces valeurs dynamiques.
Les paramètres obligatoires sont définis en entourant le nom du paramètre d'accolades {}. Ce paramètre sera ensuite injecté dans votre fonction de rappel de route ou dans la méthode de votre contrôleur. Par exemple :
Route::get('/articles/{id}', function ($id) {
return 'Affichage de l'article numéro : ' . $id;
});Si vous visitez /articles/42 dans votre navigateur, vous verrez "Affichage de l'article numéro : 42". Vous pouvez définir autant de paramètres requis que nécessaire : Route::get('/articles/{postId}/commentaires/{commentId}', ...).
Il est également possible de définir des paramètres optionnels en ajoutant un point d'interrogation ? après le nom du paramètre. Il est crucial de fournir une valeur par défaut à l'argument correspondant dans la fonction de rappel ou la méthode du contrôleur pour ces paramètres optionnels :
Route::get('/utilisateur/{nom?}', function ($nom = 'Invité') {
return 'Bonjour, ' . $nom;
});Avec cette route, visiter /utilisateur/Marie affichera "Bonjour, Marie", tandis que visiter /utilisateur affichera "Bonjour, Invité". Vous pouvez également ajouter des contraintes sur vos paramètres de route en utilisant la méthode where, par exemple pour s'assurer qu'un identifiant est numérique : Route::get('/utilisateur/{id}', ...)->where('id', '[0-9]+'); ou alphabétique : Route::get('/utilisateur/{name}', ...)->where('name', '[A-Za-z]+');. Des contraintes globales peuvent aussi être définies dans la méthode boot de votre App\Providers\RouteServiceProvider.
Utiliser les routes nommées : pour une flexibilité accrue
Nommer vos routes est une pratique extrêmement utile qui facilite la génération d'URL ou de redirections vers des routes spécifiques. Si le nom d'une route est défini, vous pouvez y faire référence en utilisant ce nom, même si l'URI de la route change ultérieurement. Cela rend votre code plus maintenable et moins sujet aux erreurs liées à des URL codées en dur.
Pour nommer une route, enchaînez la méthode name() à la définition de la route :
Route::get('/mon-profil/edition', function () {
// Logique pour afficher le formulaire d'édition du profil
})->name('profil.edit');Une fois qu'une route est nommée, vous pouvez générer son URL en utilisant la fonction helper route(). Si la route nommée nécessite des paramètres, vous pouvez les passer en second argument à la fonction route() :
// Générer une URL simple
$url = route('profil.edit'); // Résultat : http://votredomaine.com/mon-profil/edition
// Route avec paramètres
Route::get('/articles/{id}', function ($id) {
// ...
})->name('articles.show');
$urlArticle = route('articles.show', ['id' => 123]); // Résultat : http://votredomaine.com/articles/123L'avantage majeur est que si vous décidez de changer l'URI /mon-profil/edition en /profil/modifier, tant que le nom profil.edit reste le même, toutes les utilisations de route('profil.edit') généreront automatiquement la nouvelle URL sans que vous ayez à modifier votre code à plusieurs endroits. C'est un gain de temps et de robustesse considérable, surtout dans les applications de grande taille.
Cette approche est particulièrement utile dans vos vues Blade lors de la création de liens, ou dans vos contrôleurs lors de redirections. Par exemple, pour créer un lien dans Blade : Modifier mon profil. Pour une redirection après une action dans un contrôleur : return redirect()->route('articles.show', ['id' => $article->id]);. Utiliser les routes nommées est une bonne pratique fortement recommandée pour tous vos projets Laravel.