Les paramètres GET

Article mis à jour il y a 5 ans pour Laravel 5.7

Les paramètres GET nous permettent de personnaliser nos pages en fonction d'une information fournie par le visiteur.

Dans ce tutoriel nous allons voir comment les utiliser avec Laravel.

Créer une nouvelle route

Afin d'expérimenter avec les paramètres GET nous allons créer une nouvelle route /bonjour dans le fichier routes/web.php qui répondra « Bonjour ».

Route::get('/bonjour', function () {
    return 'Bonjour';
});

Passer un paramètre via ?prenom=thibaud

L'objectif est maintenant d'affiche « Bonjour thibaud » si la personne visite http://localhost:8000/bonjour?prenom=thibaud. Nous pouvons utiliser la méthode PHP classique avec la variable globale $_GET.

Route::get('/bonjour', function () {
    return 'Bonjour ' . $_GET['prenom'];
});

Ou la fonction Laravel request() qui nous offrira par la suite plus de fonctionnalités et de libertés :

Route::get('/bonjour', function () {
    return 'Bonjour ' . request('prenom');
});

Les deux résultats sont identiques mais nous préférerons utiliser la deuxième méthode dans un projet Laravel.

Simplifier l'URL

L'URL http://localhost:8000/bonjour?prenom=thibaud est un peu complexe à utiliser. Nous allons préférer utiliser http://localhost:8000/bonjour/thibaud. Pour le moment ce lien nous affiche une 404, comment le faire fonctionner avec Laravel ? Nous allons utiliser les accolades dans la définition de notre route pour prévenir Laravel que nous attendons un paramètre à cet emplacement :

Route::get('/bonjour/{prenom}', function () {
    return 'Bonjour ' . request('prenom');
});

Le « prenom » entre les accolades spécifie le nom du paramètre. Nous pouvons alors récupérer ce paramètre grâce à son nom avec la fonction request('prenom') comme auparavant. Vous pouvez tester en changeant le nom du paramètre, le fonctionnement sera identique :

Route::get('/bonjour/{nom}', function () {
    return 'Bonjour ' . request('nom');
});

Dans le prochain tutoriel, nous verrons comment afficher ce prénom dans du HTML à la place d'une chaîne de caractères.