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 à travers la classe Bow\Http\Request. Cette classe vous permet d'avoir les informations sur la requête envoyée par l'utilisateur comme son adresse IP, le type du message, les informations d'un formulaire, etc.
Accéder à la requête
Pour capturer un message ou requête HTTP, vous pouvez premièrement utiliser le helper request() qui vous donne une instance de Bow\Http\Request, deuxièmement vous pouvez passer par l'injecteur de dépendance via une action de contrôleur.
Récupération des données
En utilisant quelques méthodes simples, vous pouvez accéder à toutes les entrées utilisateur de votre application.
Via des Closures de route
- Avec le helper
request:
$app->get('/', function () {
$request = request();
$name = $request->get('name');
// code ici
});
- Par l'injection de dépendance
use Bow\Http\Request;
$app->get('/', function (Request $request) {
return $request->get('name');
});
Via un controller
Si votre méthode de contrôleur attend également une entrée d'un paramètre de route, vous devez répertorier les paramètres de votre route après vos autres dépendances. Par exemple, si votre route est définie comme suit :
$app->get('/users/:id', 'UserController::show');
Vous pouvez toujours taper la requête Bow\Http\Request et accéder à l'id de votre paramètre de route en définissant votre méthode de contrôleur comme suit:
namespace App\Controllers;
use App\Controllers\Controller;
use App\Models\User;
use Bow\Http\Request;
class UserController extends Controller
{
/**
* Afficher le profil pour l'utilisateur donné
*
* @param Request $request
* @return mixed
*/
public function show(Request $request, $id)
{
$user = User::where('id', $id)->first();
$user->name = $request->get('name');
$user->save();
return $this->render('user/profile', ['user' => $user]);
}
}
Chemin de requête et méthode
Récupérer le chemin de requête
La méthode path renvoie les informations de chemin de la requête. Ainsi, si la requête entrante est ciblée sur http://example.com/bar/zar, la méthode path retournera bar/zar:
$uri = $request->path();
La méthode is vous permet de vérifier que le chemin de requête entrant correspond à un modèle donné. Vous pouvez utiliser le caractère * comme caractère générique lorsque vous utilisez cette méthode:
if ($request->is('users/*')) {
//
}
Récupérer la méthode de requête
La méthode method retournera le verbe HTTP pour la requête. Vous pouvez utiliser les méthodes isPost, isGet, isPut, isDelete, isOptions, isPatch pour vérifier que le verbe HTTP correspond à une méthode HTTP de la requête donnée :
$method = $request->method();
if ($request->isPost()) {
$filename = $request->file('filename');
$filename->moveTo('/some/directory');
}
Vérifier si la requête est en AJAX
Pour déterminer si une requête a été envoyée via AJAX, la méthode isAjax vous permet de vérifier cela.
if ($request->isAjax()) {
//
}
Vérifier si la requête attend une réponse JSON
La méthode wantsJson vous permet de vérifier si la requête attend une réponse au format JSON. Souvent, les requêtes AJAX sont envoyées avec l'en-tête Accept: application/json, la méthode wantsJson vérifie si cet en-tête est présent dans la requête.
if ($request->wantsJson()) {
// code ici
}
Récupérer une entrée
Souvent, la requête envoyée par le client HTTP contient des données souvent demandées pour actionner un mécanisme, par exemple celui d'une inscription.
Bow Framework, dans son démarrage, optimise les données envoyées au serveur en remplaçant les valeurs vides par null et en supprimant les espaces dans les valeurs de chaque champ avec la fonction PHP trim.
$name = $request->get('name');
// Récupérer directement la valeur via le nom du champ
$name = $request->name;
Vous pouvez aussi définir une valeur par défaut à get.
$name = $request->get('name', 'Papac');
$name = $request->get('name', function () {
return User::first()->name;
});
Ceci permet justement de récupérer le contenu du champ name d'un formulaire ou d'une URL en fonction du type de requête.
Récupération d'une partie des données d'entrée
Si vous devez extraire un sous-ensemble des données d'entrée, vous pouvez utiliser les méthodes ignore et only. Ces deux méthodes acceptent un seul tableau ou une liste d'arguments dynamique:
$input = $request->only(['name', 'lastname']);
$input = $request->only('name', 'lastname');
$input = $request->ignore(['password']);
$input = $request->ignore('password');
Déterminer si une valeur d'entrée est présente
Vous devez utiliser la méthode has pour déterminer si une valeur est présente sur la requête. La méthode has renvoie true si la valeur est présente dans la requête:
if ($request->has('name')) {
//
}
Déterminer l'adresse IP du client
Souvent, vous allez vouloir récupérer l'adresse IP du client ayant envoyé la requête. La méthode ip permet, comme son nom l'indique, de récupérer l'adresse IP du client :
$ip = $request->ip();
if ($ip == 'xxx.xxx.xxx.xxx') {
// code ici
}
Déterminer le port du client
La méthode port permet, comme son nom l'indique, de récupérer le port du client :
$port = $request->port();
// Code ici
Déterminer le protocole du client
La méthode protocol permet, comme son nom l'indique, de récupérer le protocole du client :
$protocol = $request->protocol();
// Code ici
Il y a aussi la méthode isProtocol qui permet de faire de la vérification sur le protocole :
if ($request->isProtocol('http')) {
//
}
Et isSecure vous permet de vérifier si la requête est sécurisée.
if ($request->isSecure()) {
//
}
Récupérer les en-têtes HTTP
Vous avez la possibilité de récupérer les en-têtes HTTP du client avec la méthode getHeader et hasHeader pour vérifier l'existence d'un en-tête HTTP.
$header = $request->getHeader('content-type');
echo $header;
// text/html
if ($request->hasHeader('x-proxy-key')) {
// code ici
}
Récupérer l'IP du serveur
Vous avez la possibilité de récupérer l'adresse IP du serveur sur lequel votre application Bow est hébergée.
$hostname = $request->hostname();
echo $hostname;
// exemple.com
Récupérer le domaine Origin
Le domaine dit origin est l'adresse récupérée avec la méthode hostname ensuite associée au protocole de la requête.
$hostname = $request->origin();
echo $hostname;
// https://exemple.com
Récupérer le temps de la requête
Il est souvent intéressant de voir combien de temps a pris une requête. La méthode time permet de le faire et elle retourne un timestamp.
$time = $request->time();
echo $time;
Récupérer une instance de la session
Il est souvent intéressant de manipuler la session directement. La méthode session permet de le faire et elle retourne l'instance de la session.
$session = $request->session();
var_dump($session);
Pour plus d'informations sur la session, visitez la page HTTP Session.
Récupérer l'authentification courante
Vous pouvez aussi avoir l'authentification en cours si vous avez utilisé le système d'authentification native de Bow Framework.
$user = $request->user();
// Définir le guard
$user = $request->user('api');
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.