Des variables et des vues

Article mis à jour il y a 5 ans pour Laravel 5.7

Dans ce tutoriel nous allons voir comment passer des variables à nos vues afin de les afficher plus simplement avec du HTML.

Retourner une vue

Afin de retourner une vue dans notre route /bonjour/{nom}, je vais remplacer la chaîne de caractère par un appel à la fonction view('bonjour'). Puis créer un nouveau fichier dans ressources/views nommé bonjour.blade.php.

Route::get('/bonjour/{nom}', function () {
    return view('bonjour');
});

Afficher le nom de la personne

Dans ma vue, je peux ouvrir des balises PHP et afficher avec echo le résultat de la fonction request('nom') comme auparavant.

<h1>Bonjour <?php echo request('nom') ?></h1>

Notre code fonctionne maintenant de la même manière que lors de la vidéo précédente.

Utilisation de Blade pour afficher les variables

Blade est le moteur de template de Laravel, c'est l'outil qui va nous permettre de coder nos vues. Blade nous fournit un raccourci pour afficher une variable dans nos vues : les doubles accolades. Nous pouvons donc modifier notre vue comme ceci :

<h1>Bonjour {{ request('nom') }}</h1>

Séparation du PHP et du HTML

Afin de garder notre code propre et organisé, nous allons éviter de faire des appels de fonction ou des traitements trop lourd dans nos vues. Dans ce cas, request('nom') est vraiment très simple, mais dans la vraie vie, ce code pourrait être plus compliqué. Nous allons donc enregistrer le résultat dans une variable et simplement afficher cette variable dans notre vue.

Route::get('/bonjour/{nom}', function () {
    $nom = request('nom');

    return view('bonjour');
});
<h1>Bonjour {{ $nom }}</h1>

Ce code nous retourne une erreur car, par défaut, dans Laravel, les vues n'ont pas accès aux variables définies dans notre fonction anonyme.

Passer une variable à la vue

Pour passer une variable à la vue, nous pouvons envoyer un tableau en deuxième paramètre à la fonction view().

Route::get('/bonjour/{nom}', function () {
    $nom = request('nom');

    return view('bonjour', [
        'nom' => $nom,
    ]);
});
<h1>Bonjour {{ $nom }}</h1>

Cet exemple commence a être complexe, pour bien comprendre je vous conseille de différencier les différents termes. Nous avons 6 occurences de « nom » et 3 concepts différents :

Pour rendre le fonctionnement plus clair, nous pouvons renommer ces concepts :

Route::get('/bonjour/{nom_du_parametre_get}', function () {
    $nom_dans_la_fonction_anonyme = request('nom_du_parametre_get');

    return view('bonjour', [
        'nom_dans_la_vue' => $nom_dans_la_fonction_anonyme,
    ]);
});
<h1>Bonjour {{ $nom_dans_la_vue }}</h1>

Dans le prochain tutoriel, nous verrons comment utiliser des fonctionnalités plus avancées avec Blade.