Requêtes HTTP
Introduction
Une requête HTTP est le message que l'utilisateur envoie à l'application Bow via son navigateur ou d'autres outils tels que curl, httpie, etc.
Ce message est traité par Bow via la classe Bow\Http\Request. Cette classe permet d'accéder aux informations de la requête : adresse IP, méthode HTTP, données de formulaire, fichiers uploadés, etc.
Accéder à la requête
Via le helper
$request = request();
$name = $request->get('name');
Via l'injection de dépendance
use Bow\Http\Request;
$app->get('/', function (Request $request) {
return $request->get('name');
});
Via un contrôleur
namespace App\Controllers;
use App\Models\User;
use Bow\Http\Request;
class UserController
{
public function show(Request $request, int $id)
{
$user = User::retrieve($id);
$user->name = $request->get('name');
$user->persist();
return view('user/profile', ['user' => $user]);
}
}
Récupérer les données
Récupérer une valeur
// Via la méthode get()
$name = $request->get('name');
// Via la propriété magique
$name = $request->name;
// Avec une valeur par défaut
$name = $request->get('name', 'Invité');
// Avec un callback par défaut
$name = $request->get('name', fn() => User::first()->name);
Récupérer toutes les données
$data = $request->all();
Filtrer les données
// Récupérer uniquement certains champs
$data = $request->only(['name', 'email']);
// Exclure certains champs
$data = $request->ignore(['password', 'password_confirmation']);
Vérifier l'existence
if ($request->has('name')) {
// Le champ existe
}
Récupérer les anciennes valeurs
Après une redirection avec erreurs de validation :
$oldName = $request->old('name', 'Valeur par défaut');
Fichiers uploadés
Récupérer un fichier
$file = $request->file('avatar');
if ($file) {
$file->moveTo('/uploads/avatars');
}
Fichiers multiples
$files = $request->file('documents');
foreach ($files as $file) {
$file->moveTo('/uploads/documents/' . $file->getClientFilename());
}
Vérifier l'existence
if (Request::hasFile('avatar')) {
// Un fichier a été uploadé
}
Informations de la requête
URL et chemin
// Chemin de la requête (ex: /users/1)
$path = $request->path();
// URL complète (ex: https://example.com/users/1)
$url = $request->url();
// Origine (ex: https://example.com)
$origin = $request->origin();
// Nom d'hôte (ex: example.com)
$host = $request->hostname();
// Domaine sans port (ex: example.com)
$domain = $request->domain();
Vérifier le chemin
if ($request->is('users/*')) {
// La requête commence par /users/
}
Méthode HTTP
$method = $request->method(); // GET, POST, PUT, DELETE, etc.
// Vérifications rapides
if ($request->isGet()) { }
if ($request->isPost()) { }
if ($request->isPut()) { }
if ($request->isDelete()) { }
Type de requête
// Requête AJAX
if ($request->isAjax()) {
// Traitement AJAX
}
// Requête attendant du JSON
if ($request->wantsJson()) {
return response()->json($data);
}
Informations client
Adresse IP et port
$ip = $request->ip();
$port = $request->port();
User Agent
$userAgent = $request->userAgent();
Langue et locale
$lang = $request->lang(); // ex: "fr"
$locale = $request->locale(); // ex: "fr_FR"
Referer
$referer = $request->referer();
if ($request->isReferer('https://google.com/*')) {
// L'utilisateur vient de Google
}
Protocole et sécurité
$protocol = $request->protocol(); // http ou https
if ($request->isSecure()) {
// Connexion HTTPS
}
if ($request->isProtocol('https')) {
// Même chose
}
En-têtes HTTP
Récupérer un en-tête
$contentType = $request->getHeader('content-type');
$authorization = $request->getHeader('authorization');
Récupérer tous les en-têtes
$headers = $request->getHeaders();
Vérifier l'existence
if ($request->hasHeader('x-api-key')) {
$apiKey = $request->getHeader('x-api-key');
}
Identifiant de requête
Chaque requête possède un identifiant unique :
$requestId = $request->id();
// ou
$requestId = $request->getId();
// Définir un ID personnalisé
$request->setId('custom-request-id');
Session et authentification
Accéder à la session
$session = $request->session();
$session->put('key', 'value');
Utilisateur authentifié
$user = $request->user();
// Avec un guard spécifique
$user = $request->user('api');
Cookies
// Récupérer tous les cookies
$cookies = $request->cookie();
// Récupérer un cookie spécifique
$token = $request->cookie('remember_token');
Validation
Valider les données directement depuis la requête :
$validation = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email',
'password' => 'required|min:8'
]);
if ($validation->fails()) {
return back()->withErrors($validation->getMessages());
}
Bags (données partagées)
Stocker des données temporaires dans la requête :
// Définir une valeur
$request->setBag('user_permissions', ['read', 'write']);
// Récupérer une valeur
$permissions = $request->getBag('user_permissions');
Temps de la requête
$timestamp = $request->time();
Tableau récapitulatif
| Méthode | Description |
|---|---|
get($key, $default) | Récupère une valeur |
all() | Toutes les données |
only($keys) | Filtre par clés |
ignore($keys) | Exclut des clés |
has($key) | Vérifie l'existence |
file($key) | Récupère un fichier |
path() | Chemin de la requête |
url() | URL complète |
method() | Méthode HTTP |
ip() | Adresse IP client |
getHeader($key) | En-tête HTTP |
session() | Instance de session |
user($guard) | Utilisateur authentifié |
validate($rules) | Valide les données |
Il manque quelque chose ?
Si vous rencontrez des problèmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou sur directement sur le github.