Passer au contenu principal

Qu’est-ce que l’objet Request

Illuminate\Http\Request est la classe qui permet de manipuler de manière orientée objet les requêtes HTTP reçues par votre application. Elle donne accès à toutes les informations d’une requête : données de formulaire, chaîne de requête, fichiers, en-têtes, etc.

Injection de la requête dans un contrôleur

Lorsque vous typez une méthode de contrôleur avec Illuminate\Http\Request, le conteneur de services Laravel injecte automatiquement l’instance de la requête.
<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request): RedirectResponse
    {
        $name = $request->input('name');

        // Sauvegarde de l'utilisateur...

        return redirect('/users');
    }
}
Vous pouvez faire de même dans une closure de route.
use Illuminate\Http\Request;

Route::get('/', function (Request $request) {
    // ...
});

Combinaison avec les paramètres de route

Si votre méthode reçoit aussi des paramètres de route, placez ces derniers après Request.
use App\Http\Controllers\UserController;

Route::put('/user/{id}', [UserController::class, 'update']);
public function update(Request $request, string $id): RedirectResponse
{
    // $request pour la requête, $id pour le paramètre de route

    return redirect('/users');
}

Récupération des données de la requête

Récupérer toutes les entrées

La méthode all retourne toutes les entrées sous forme de tableau. Elle fonctionne aussi bien pour les formulaires HTML que pour les requêtes XHR.
$input = $request->all();

Récupérer un champ spécifique

La méthode input récupère une valeur depuis la charge utile de la requête (y compris la chaîne de requête), quel que soit le verbe HTTP.
$name = $request->input('name');
Vous pouvez fournir une valeur par défaut en deuxième argument.
$name = $request->input('name', 'Sally');
Pour les entrées de tableau, utilisez la notation « point ».
$name = $request->input('products.0.name');

$names = $request->input('products.*.name');

Récupérer la chaîne de requête

La méthode query ne récupère la valeur que depuis la chaîne de requête (après ?).
$name = $request->query('name');

$name = $request->query('name', 'Helen');

// Récupère toute la chaîne de requête sous forme de tableau
$query = $request->query();
input cible à la fois le corps de la requête et la chaîne de requête, tandis que query ne cible que la chaîne de requête. Utilisez query si vous voulez distinguer les données POST du formulaire des paramètres d’URL.

Récupération typée

Au-delà de input, il existe des méthodes pour récupérer les valeurs avec un type spécifique.
// Récupère en tant que chaîne (instance Stringable)
$name = $request->string('name')->trim();

// Récupère en tant qu'entier
$perPage = $request->integer('per_page');

// Récupère en tant que booléen ("1", "true", "on", "yes" → true)
$archived = $request->boolean('archived');

// Récupère en tant que tableau
$versions = $request->array('versions');

// Récupère en tant qu'instance Carbon
$birthday = $request->date('birthday');

Propriétés dynamiques

Vous pouvez également accéder aux champs comme à des propriétés.
$name = $request->name;
Les propriétés dynamiques cherchent d’abord dans la charge utile de la requête, puis dans les paramètres de route.

Récupérer un sous-ensemble d’entrées

Utilisez only ou except pour récupérer un sous-ensemble.
$input = $request->only(['username', 'password']);

$input = $request->except(['credit_card']);

Vérifier la présence d’une entrée

has vérifie si une valeur est présente dans la requête.
if ($request->has('name')) {
    // ...
}

// Vérifie que toutes les clés sont présentes
if ($request->has(['name', 'email'])) {
    // ...
}
Pour vérifier qu’une valeur est présente et non vide, utilisez filled.
if ($request->filled('name')) {
    // ...
}
Pour vérifier qu’une valeur est absente ou vide, utilisez isNotFilled.
if ($request->isNotFilled('name')) {
    // ...
}

Chemin et méthode de la requête

Récupérer et vérifier le chemin

// Récupère le chemin (ex. : "foo/bar")
$uri = $request->path();

// Vérifie une correspondance avec un pattern (le joker * est autorisé)
if ($request->is('admin/*')) {
    // ...
}

// Vérifie la correspondance avec une route nommée
if ($request->routeIs('admin.*')) {
    // ...
}

Récupérer l’URL

// URL sans chaîne de requête
$url = $request->url();

// URL avec chaîne de requête
$urlWithQueryString = $request->fullUrl();

Vérifier la méthode HTTP

isMethod permet de vérifier la méthode HTTP.
$method = $request->method();

if ($request->isMethod('post')) {
    // Ne traite que les requêtes POST
}

Upload de fichiers

Récupérer les fichiers uploadés

La méthode file retourne le fichier uploadé. Elle retourne une instance de Illuminate\Http\UploadedFile.
$file = $request->file('photo');

// Accessible aussi via une propriété dynamique
$file = $request->photo;
Pour vérifier la présence d’un fichier, utilisez hasFile.
if ($request->hasFile('photo')) {
    // ...
}

Sauvegarder le fichier

La méthode store sauvegarde le fichier sur le stockage. Le nom du fichier est généré automatiquement.
// Sauvegarde dans le répertoire "images" du disque par défaut
$path = $request->photo->store('images');

// Sauvegarde sur S3
$path = $request->photo->store('images', 's3');
Pour choisir le nom, utilisez storeAs.
$path = $request->photo->storeAs('images', 'filename.jpg');
Si vous acceptez des uploads de fichiers, validez toujours leur type et leur taille. Il est recommandé de traiter cela via la validation.

Exemple : réception de données de formulaire

Exemple de réception d’un formulaire d’inscription dans un contrôleur.
<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function store(Request $request): RedirectResponse
    {
        // Récupère les données du formulaire
        $name = $request->input('name');
        $email = $request->input('email');
        $password = $request->input('password');

        // Récupère uniquement les champs nécessaires
        $data = $request->only(['name', 'email', 'password']);

        // Création de l'utilisateur...

        return redirect('/dashboard');
    }
}
Route correspondante :
use App\Http\Controllers\RegisterController;

Route::post('/register', [RegisterController::class, 'store']);

Prochaines étapes

Middleware

Revenez sur l’utilisation des middlewares pour filtrer les requêtes.
Dernière modification le 13 juillet 2026