Vous êtes sur la page 1sur 8

4 www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.

219:1587248845
Les réponses
Nous avons expliqué précédemment comment la requête qui arrive est traitée par les
routes. Voyons maintenant les réponses que nous pouvons renvoyer au client. Nous
allons présenter le système des vues de Laravel avec la possibilité de transmettre des
paramètres. Nous décrirons aussi comment créer des templates avec l’outil Blade.

Construire une réponse

Codes des réponses

Dans le protocole HTTP, il existe, classés par grandes catégories, des codes pour
spécifier les réponses. Voici les trois principaux :
• 200 : requête exécutée avec succès ;
• 404 : l’adresse demandée n’a pas été trouvée ;
• 500 : erreur sur le serveur.
Dans les exemples utilisés dans le chapitre précédent sur les routes, je n’ai pas précisé
de code ; je me suis contenté de retourner un texte au client. Ce dernier veut quelque
chose d’explicite, alors que les moteurs de recherche savent interpréter les codes.
En plus du simple return pour renvoyer la réponse, je peux utiliser l’helper response
et préciser le code :

<?php
Route::get('{n}', function($n) {
return response('Je suis la page ' . $n . ' !', 200);
})->where('n', '[1-3]');

Maintenant, je retourne une véritable réponse HTTP avec le code correspondant.


Première partie – Les bases de Laravel

Il existe la façade Response pour les réponses. On peut donc écrire de façon
équivalente :

<?php
return Response::make('Je suis la page ' . $n . ' !', 200);

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


Vues

Dans une application réelle, vous retournerez rarement la réponse directement à partir
d’une route ; vous passerez au moins par une vue. Dans sa version la plus simple, une
vue est un simple fichier avec du code HTML :

<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Ma première vue</title>
<body>
Je suis une vue !
</body>
</html>

Il faut enregistrer cette vue (j’ai choisi le nom vue1) dans le dossier resources/
views avec l’extension php.

La vue dans le dossier des vues

! Même si vous n’écrivez que du code HTML dans une vue, vous devez l’enregistrer avec
l’extension .php.

On peut appeler cette vue à partir d’une route avec le code suivant :

<?php
Route::get('/', function()
{
return view('vue1');
});

32
Chapitre 4. Les réponses

Je vous rappelle la belle sémantique de Laravel qui se lit comme de la prose : je retourne
(return) une vue (view) à partir du fichier de vue vue1.
Voici une illustration du processus.

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845

Le cycle de requête avec une vue

La vue paramétrée

URL

En général, on doit transmettre des informations à une vue. Voyons à présent comment
mettre cela en place. Supposons que nous voulions répondre à une requête de la forme
suivante, où le paramètre n doit prendre une valeur numérique :

http://monsite.fr/article/n

Constitution de l’URL

Voyons comment cette URL est constituée :


• la base de l’URL est constante pour le site, quelle que soit la requête ;

33
Première partie – Les bases de Laravel

• la partie fixe ici correspond aux articles ;


• la partie variable correspond au numéro de l’article désiré.

Route

Il nous faut une route pour intercepter ces URL :

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


<?php
Route::get('article/{n}', function($n) {
return view('article')->with('numero', $n);
})->where('n', '[0-9]+');

Vue

Il ne nous reste plus qu’à créer la vue article.php dans le dossier resources/
views :

<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Les articles</title>
<body>
<p>C'est l'article n° <?php echo $numero ?></p>
</body>
</html>

Pour récupérer le numéro de l’article, on utilise la variable $numero. Voici une sché-
matisation du fonctionnement.

Demande de l’article numéro 1

Il existe une méthode « magique » pour transmettre un paramètre, par exemple la


variable numero de notre exemple. Il suffit de concaténer le nom de la variable au mot
clé with :

34
Chapitre 4. Les réponses

return view('article')->withNumero($n);

On peut aussi transmettre un tableau comme deuxième paramètre :

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


<?php
return view('article', ['numero'=>$n]);

Simplifier la syntaxe

Laravel possède un moteur de templates élégant nommé Blade, qui facilite beaucoup
de choses. La première est de nous simplifier la syntaxe. Prenons par exemple la ligne
suivante :

<p>C'est l'article n° <?php echo $numero ?></p>

On peut l’écrire avec la syntaxe de Blade :

<p>C'est l'article n° {{$numero}}</p>

Tout ce qui se trouve entre les doubles accolades est interprété comme du code PHP.
Cependant, pour que cela fonctionne, il faut indiquer à Laravel qu’on veut utiliser
Blade pour cette vue.

Une vue activée pour Blade

Il suffit d’ajouter blade au nom du fichier, avant l’extension php. Vous pouvez tester
l’exemple précédent avec ces modifications et vous verrez que tout fonctionne parfai-
tement avec une syntaxe épurée.

Il y a aussi la version avec la syntaxe {!!...!!}. La différence est que le texte entre
les doubles accolades est échappé ou purifié. C’est une mesure de sécurité parce qu’un
utilisateur pourrait très bien mettre du code malveillant dans l’URL.

35
Première partie – Les bases de Laravel

Template

Une fonction fondamentale de Blade est de permettre le templating, c’est-à-dire de


factoriser le code de présentation. Poursuivons notre exemple en complétant notre
application avec une autre route chargée d’intercepter des URL pour des factures,
ainsi que sa vue :

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


Route
<?php
Route::get('facture/{n}', function($n) {
return view('facture')->withNumero($n);
})->where('n', '[0-9]+');

Vue
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Les factures</title>
<body>
<p>C'est la facture n° {{$numero}}</p>
</body>
</html>

On se rend compte que cette vue est pratiquement la même que celle pour les articles.
Il serait intéressant de placer le code commun dans un fichier. C’est justement le but
d’un template.
Template
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>@yield('titre')</title>
<body>
@yield('contenu')
</body>
</html>

J’ai repris le code commun et prévu deux emplacements repérés par le mot-clé @yield
et nommés titre et contenu. Il suffit maintenant de modifier les deux vues.

36
Chapitre 4. Les réponses

Vue pour les articles


@extends('template')

@section('titre')
Les articles
@endsection

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


@section('contenu')
<p>C'est l'article n° {{$numero}}</p>
@endsection

Vue pour les factures


@extends('template')

@section('titre')
Les factures
@endsection

@section('contenu')
<p>C'est la facture n° {{$numero}}</p>
@endsection

Dans un premier temps, on dit qu’on veut utiliser le template avec @extends et le
nom du template. Ensuite, on remplit les zones prévues dans le template grâce à la
syntaxe @section en précisant le nom de l’emplacement et en fermant avec @end-
section (l’ancienne syntaxe @stop est encore fonctionnelle). Voici un schéma pour
bien visualiser tout cela avec les articles.

Fonctionnement du template

37
Première partie – Les bases de Laravel

Au niveau du dossier des vues, on a donc les trois fichiers.

www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587248845


Dossier des vues

Lorsqu’elles deviendront nombreuses, on organisera nos vues dans des dossiers. Vous
pouvez d’ailleurs remarquer qu’il en existe déjà plusieurs dans l’installation de base.

Les redirections

Souvent, il ne faut pas envoyer directement la réponse, mais rediriger sur une autre
URL. Pour réaliser cela, on a l’helper redirect :

<?php
return redirect('facture');

Ici, on redirige sur l’URL facture. On peut aussi rediriger sur une route nommée :

<?php
return redirect()->route('facture');

Ici on redirige sur la route nommée facture.


On verra de nombreux exemples de redirections dans les prochains chapitres.

En résumé

• Laravel offre la possibilité de créer des vues.


• Il est facile de transmettre des paramètres aux vues.
• L’outil Blade permet de créer des templates et d’optimiser ainsi le code des vues.
• On peut facilement effectuer des redirections.

38

Vous aimerez peut-être aussi