Aller au contenu principal
Version: Canary 🚧

📦 HTTP Response

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 🎉.

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.

Protototype de la méthode json​

$response->json($data, $code, $headers);
ParamètreTypeDescription
$dataArray, stdClass, Iterable, JsonSerializableLes données à sérialiser
$codeIntLe code du status HTTP
$headersArrayLes 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.

Protototype de la méthode render​

$response->render($name, $data, $code, $headers);
ParamètreType
$nameString - Le nom d'une vue Ă  rendre
$dataArray - Les données à envoyer à la vue
$codeInt - Le code du status HTTP
$headersArray - 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.

Protototype de la méthode download​

$response->download($file, $filename = null, $headers, $disposition = 'attachment');
ParamètreTypeDescription
$fileStringLe chemin absolu du fichier
$filenameStringLe nouveau du fichier par defaut est null
$headersArrayLes entêtes à ajouter à la réponse
$dispositionStringIndiquant 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.

Redirection avec to​

La redirection avec to permet de renvoyer l'utilisateur sur une autre la page.

return redirect()->to($path);

Prototype de to​

ParamètreTypeDescription
$pathStringL'URL de rédirection
return redirect()->to('/users');

Redirection avec back​

La redirection avec back permet de renvoyer l'utilisateur sur la page précédente.

return redirect()->back($status_code);

Prototype de back​

ParamètreType
$status_codeInt - 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.