
Définir des routes basiques dans `routes/web.php`
Apprenez à créer vos premières routes web dans Laravel en utilisant le fichier `routes/web.php`, à associer des URL à des actions et à retourner des réponses simples ou des vues.
Introduction au fichier `routes/web.php` : le chef d'orchestre de vos URL
Au coeur de chaque application Laravel se trouve le mécanisme de routage, qui dirige les requêtes des utilisateurs vers le code approprié. Pour les applications web traditionnelles, celles qui servent des pages HTML à un navigateur, le fichier principal où vous définirez ces routes est routes/web.php. Ce fichier est spécifiquement conçu pour les routes qui utilisent l'état de session, la protection CSRF, et généralement, retournent des vues Blade ou des redirections.
Lorsque vous ouvrez le fichier routes/web.php dans un nouveau projet Laravel, vous y trouverez souvent une route d'exemple, généralement celle qui affiche la page d'accueil par défaut de Laravel. C'est ici que vous allez décrire comment votre application doit répondre à différentes URL. Chaque entrée dans ce fichier représente une "règle" qui associe une URI (la partie de l'URL qui suit le nom de domaine de votre site) et une méthode HTTP (comme GET, POST, etc.) à une action spécifique.
L'action déclenchée par une route peut être une simple fonction anonyme (aussi appelée "closure" en PHP) pour des tâches très simples, ou, de manière plus structurée et recommandée pour des applications de taille conséquente, une méthode d'un contrôleur dédié. Comprendre comment manipuler ce fichier est la première étape essentielle pour construire la navigation et les fonctionnalités de votre application Laravel.
Syntaxe de base : la façade `Route` et les méthodes HTTP
Pour définir une route dans Laravel, vous utiliserez la façade Route. Cette façade fournit des méthodes statiques correspondant aux différents verbes HTTP. La méthode la plus couramment utilisée pour afficher une page est Route::get(), qui répond aux requêtes HTTP GET.
La syntaxe la plus simple pour une route consiste à fournir deux arguments à la méthode Route::get() :
- L'URI que vous souhaitez intercepter. Par exemple,
'/'pour la racine de votre site, ou'/contact'pour une page de contact. - Une fonction de rappel (closure) qui sera exécutée lorsque l'URI est atteinte. Cette fonction doit retourner quelque chose qui peut être affiché par le navigateur, comme une chaîne de caractères, une vue Blade, ou une réponse JSON.
Voici un exemple très basique :
use Illuminate\Support\Facades\Route;
// Route pour la page d'accueil
Route::get('/', function () {
return 'Bienvenue sur ma première page Laravel !';
});
// Route pour une page "à propos"
Route::get('/a-propos', function () {
return 'Ceci est la page "A propos".';
});Si vous démarrez votre serveur de développement Laravel (avec php artisan serve) et que vous visitez http://localhost:8000/ dans votre navigateur, vous verrez le message "Bienvenue sur ma première page Laravel !". Si vous visitez http://localhost:8000/a-propos, vous verrez "Ceci est la page "A propos"".
Laravel fournit des méthodes pour tous les verbes HTTP standards :
Route::get($uri, $callback): Pour récupérer des ressources.Route::post($uri, $callback): Pour créer des ressources (souvent utilisé avec des formulaires).Route::put($uri, $callback): Pour mettre à jour intégralement une ressource.Route::patch($uri, $callback): Pour mettre à jour partiellement une ressource.Route::delete($uri, $callback): Pour supprimer une ressource.Route::options($uri, $callback): Pour répondre aux requêtes OPTIONS.
Il est également possible de définir une route qui répond à plusieurs verbes HTTP en utilisant la méthode match, ou à tous les verbes HTTP en utilisant la méthode any :
// Route répondant aux requêtes GET et POST sur /soumettre-formulaire
Route::match(['get', 'post'], '/soumettre-formulaire', function () {
// Logique pour afficher le formulaire (GET) ou le traiter (POST)
if (request()->isMethod('post')) {
return 'Formulaire soumis !';
}
return 'Voici le formulaire.';
});
// Route répondant à tous les verbes HTTP sur /tous-les-verbes
Route::any('/tous-les-verbes', function () {
return 'Cette route répond à n'importe quel verbe HTTP.';
});Retourner des vues Blade depuis vos routes
Bien que retourner des chaînes de caractères directement depuis une route soit utile pour des tests rapides, la plupart du temps, vous voudrez retourner une vue Blade. Les vues Blade sont des fichiers HTML (avec l'extension .blade.php) stockés dans le répertoire resources/views qui permettent d'utiliser le moteur de template Blade de Laravel pour afficher dynamiquement des données.
Pour retourner une vue, vous pouvez utiliser la fonction helper view(). Par exemple, si vous avez un fichier resources/views/accueil.blade.php, vous pouvez le retourner comme ceci :
Route::get('/', function () {
return view('accueil'); // Pas besoin de spécifier .blade.php ni le chemin complet resources/views
});Si votre vue se trouve dans un sous-dossier, par exemple resources/views/pages/contact.blade.php, vous utiliserez la notation avec des points :
Route::get('/contact', function () {
return view('pages.contact');
});Il est également courant de passer des données à vos vues. La fonction view() accepte un second argument optionnel, un tableau associatif où les clés deviennent des variables disponibles dans votre vue Blade :
Route::get('/utilisateur/{nom}', function ($nom) {
return view('profil', ['nomUtilisateur' => $nom, 'age' => 30]);
});Dans votre fichier resources/views/profil.blade.php, vous pourriez alors utiliser ces variables :
<h1>Profil de {{ $nomUtilisateur }}</h1>
<p>Age : {{ $age }} ans.</p>Pour les routes très simples qui ne font que retourner une vue sans logique complexe, Laravel offre une syntaxe encore plus concise avec Route::view(). Cette méthode prend l'URI, le nom de la vue, et optionnellement un tableau de données à passer à la vue :
Route::view('/bienvenue', 'pages.bienvenue', ['message' => 'Bienvenue sur notre site !']);Cela est équivalent à Route::get('/bienvenue', function () { return view('pages.bienvenue', ['message' => 'Bienvenue sur notre site !']); }); mais en plus court et plus expressif pour ce cas d'usage spécifique.
Organisation et bonnes pratiques pour `routes/web.php`
A mesure que votre application grandit, le fichier routes/web.php peut devenir volumineux. Il est important de le garder organisé. Une pratique courante est de regrouper les routes par fonctionnalité ou par section de votre site, en utilisant des commentaires pour délimiter les groupes.
Bien que les closures soient pratiques pour débuter, pour des applications plus complexes, il est fortement recommandé de déplacer la logique de vos routes dans des classes de contrôleurs. Cela permet de garder le fichier routes/web.php plus lisible et de centraliser la logique métier. Nous aborderons les contrôleurs plus en détail dans un chapitre ultérieur, mais voici un aperçu de la syntaxe :
use App\Http\Controllers\PageController;
Route::get('/', [PageController::class, 'accueil']);
Route::get('/a-propos', [PageController::class, 'aPropos']);Dans cet exemple, lorsque l'URI '/' est atteinte, la méthode accueil du contrôleur PageController sera exécutée.
Enfin, n'oubliez pas que le fichier routes/web.php est spécifiquement pour les routes qui nécessitent le middleware de groupe web. Ce groupe de middleware applique des fonctionnalités comme la gestion des sessions, la protection CSRF, et le chiffrement des cookies. Si vous construisez une API sans état (stateless), vous utiliserez plutôt le fichier routes/api.php, qui applique le groupe de middleware api.
En maîtrisant la définition des routes basiques dans routes/web.php, vous posez les fondations de la structure de navigation de votre application Laravel. C'est une compétence essentielle que vous utiliserez constamment tout au long de vos développements.