📦 HTTP Response
- Introduction
- Envoyé une réponse
- Modification de réponse
- Envoyer un JSON
- Envoyer une réponse depuis les vues
- Redirection
Introduction
Tous les routes et contrôleurs doivent retourner une réponse à renvoyer à l'utilisateur. Bow fournit plusieurs façons différentes de renvoyer des réponses. La réponse la plus élémentaire est le retour d'une chaîne depuis une route ou un contrôleur. Bow convertira automatiquement la chaîne en une réponse HTTP complète.
Envoyé une réponse
Une chaine de caractère
Une réponse HTTP peut être une chaine de caractère.
$app->get('/', function ()
{
return "Hello, world";
});
Une Collection et Un tableau ou un Object
Une réponse HTTP peut être une instance de Bow\Support\Collection
.
$app->get('/array', function ()
{
return [10, 2, 12, 'name' => 'Dakia'];
});
$app->get('/collection', function ()
{
return collect([10, 2, 12]);
});
$app->get('/object', function ()
{
return (object) ['name' => 'Dakia'];
});
Un modèle BARRY
La réponse HTTP peut être un Model
ou une Collection
de modèle, Bow la convertis directement en JSON
.
use App\Models\User;
$app->get('/', function ()
{
$model = User::where('id', 1)->first();
return $model;
});
Modification de réponse
Modification du code d'erreur
Il est très important d'ajouter les codes d'erreurs à votre réponse HTTP si vous développez un API RESTFUL. La méthode status
vous permet de le faire.
use App\Models\User;
$app->get('/', function ()
{
$response = response();
return $response->status(400);
});
Pour plus d'information sur les code HTTP. Consultez ce lien.
Si dans votre API, la requête a été traitée avec succès et que vous n'avez pas d’information à renvoyer. Il est préférable de lui retourne un 204 qu'un 200 :tada:.
Ajouter une entête HTTP
Souvent vous serez amener à ajouter d'autre entête HTTP à votre réponse HTTP. La méthode addHeader
et withHeaders
vous permet de le faire.
$response->addHeader('Content-Type', 'application/json');
Nous pouvez ajouter plusieur entête en même temps:
$response->withHeaders([
'Content-Type' => 'application/json',
'X-Proto-Value' => 1
]);
Envoyer un JSON
Dans les applications REST (Api REST/RESTFUL) les informations sont généralement retournés en JSON. Pour envoyer un information JSON au client, vous pouvez utiliser le help json
ou la méthode json
sur l'instance de Bow\Http\Response
.
json
Protototype de la méthode $response->json($data, $code, $headers);
Paramètre | Type | Description |
---|---|---|
$data | Array, stdClass , Iterable , JsonSerializable | Les données à sérialiser |
$code | Int | Le code du status HTTP |
$headers | Array | Les entêtes à ajouter sur le réponse |
Exemple d'envoye de JSON
Exemple:
$data = ['message' => 'Hello, World'];
return $response->json($data, $code = 200, [
'X-Proto-Value' => 1 // Juste un test
]);
Avec le HELPER:
$data = ['message' => 'Hello, World'];
return json($data, 200, [
'X-Proto-Value' => 1 // Juste un test
]);
Ici, Bow ajout directement l'entête HTTP Content-Type
à application/json
, donc plus besoin de l'ajouter manuellement dans le $headers
.
Envoyer une réponse depuis les vues
Souvent vous pouvez utiliser un instance de Bow\Http\Response
pour faire le rendu de vue via la méthode render
.
render
Protototype de la méthode $response->render($name, $data, $code, $headers);
| Paramètre | Type | Description | |----------|------| | $name | String - Le nom d'une vue à rendre | | $data | Array - Les données à envoyer à la vue | | $code | Int - Le code du status HTTP | | $headers | Array - Les entêtes à ajouter à la réponse |
Exemple d'envoye de vue
Exemple:
$users = User::where('id', '!=', 2)->get();
return $response->render('users', ['users' => $users], 200, [
'X-Proto-Value' => 1 // Juste un test
]);
Télécharger un fichier
Souvent vous serez amener à mettre en place des systèmes de téléchargement de fichier zip ou image, encore vous allez faire des applications où il faut s'authentifier avant de télécharge des fichiers du type dropbox. Bow offre un API simple via la classe Bow\Http\Response
pour télécharger un fichier avec la méthode download
.
download
Protototype de la méthode $response->download($file, $filename = null, $headers, $disposition = 'attachment');
Paramètre | Type | Description |
---|---|---|
$file | String | Le chemin absolu du fichier |
$filename | String | Le nouveau du fichier par defaut est null |
$headers | Array | Les entêtes à ajouter à la réponse |
$disposition | String | Indiquant si le contenu devrait être affiché en ligne dans le navigateur, c'est-à-dire en tant que page Web, ou en pièce jointe téléchargé et enregistré localement. |
Plus d'information sur l'entête Content-Disposition
.
Exemple de télécharge
Exemple:
$file = '/path/to/file.png';
return $response->download($file, 'image.png');
Redirection
Vous serez certainement amener à faire des redirections vers d'autres ressources et cela en réalité constitue une réponse HTTP. Les méthodes to
et back
(qui comme son nom l'indique permet de faire une revenir sur en arrière) de la classe Bow\Http\Redirect
.
to
Redirection avec La redirection avec to
permet de renvoyer l'utilisateur sur une autre la page.
return redirect()->to($path);
to
Prototype de Paramètre | Type | Description |
---|---|---|
$path | String | L'URL de rédirection |
return redirect()->to('/users');
back
Redirection avec La redirection avec back
permet de renvoyer l'utilisateur sur la page précédente.
return redirect()->back($status_code);
back
Prototype de Paramètre | Type |
---|---|
$status_code | Int - Le code HTTP de la réponse par defaut est égale à 302 |
return redirect()->back();
Redirection avec des informations
Vous pouvez aussi faire la redirection avec les informations envoyés par l'utilisateur et ceci avec la méthode withInput
, withFlash
comme ceci:
return redirect()->back()->withInput();
// Ou
return redirect()->to("/home")->withInput();
Avec un message flash
return redirect()->back()->withFlash('success', 'Papac');
Notez que vous pouvez donner une tableau de valeur à withInput
qui sera une collection d'information à envoyer à utilisateur.
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.