Afficher nos utilisateurs avec Eloquent et Blade

Dans ce tutoriel nous allons récupérer nos utilisateurs depuis la base de données et les afficher dans une vue avec une boucle.

Création d'une nouvelle route

Nous allons créer une nouvelle page sur notre site, et donc une nouvelle route de type GET car cette route affichera des données (contrairement aux routes POST qui traitent les formulaires).

Route::get('/utilisateurs', function () {

});

Récupération des données avec Eloquent

Eloquent nous fournit une fonction pour récupérer toutes les lignes d'une table. C'est la fonction statique all() qui nous retourne un tableau PHP.

Route::get('/utilisateurs', function () {
    $utilisateurs = App\Utilisateur::all();
});

Création d'une vue

Pour afficher nos utilisateurs, nous allons avoir besoin d'une vue. Nous avions vu dans une précédente vidéo que les vues n'ont pas accès directement aux variables de notre fonction anonyme, nous avons donc besoin de lui passer explicitement les données dans un tableau en second paramètre.

Route::get('/utilisateurs', function () {
    $utilisateurs = App\Utilisateur::all();

    return view('utilisateurs', [
        'utilisateurs' => $utilisateurs
    ]);
});

Nous n'avons plus qu'à créer notre vue dans le dossier ressources/views. Notre vue va hériter de la structure par défaut de notre application qui contient notre en-tête et notre pied de page. Et nous allons mettre le HTML propre à la page dans la section « contenu ».

@extends('layout')

@section('contenu')
    <h1>Les utilisateurs</h1>

    <ul>
        <li>…</li>
    </ul>
@endsection

Une boucle avec Blade

Pour afficher la liste de nos utilisateurs, nous avons besoin de faire une boucle. Les boucles avec Blade ressemblent à celle en PHP à quelques détails près. Au lieu d'utiliser foreach() { … } nous allons utiliser @foreach() … @endforeach. Pour afficher l'email à l'intérieur de la boucle nous allons utiliser les doubles accolades {{ }}.

@extends('layout')

@section('contenu')
    <h1>Les utilisateurs</h1>

    <ul>
        @foreach($utilisateurs as $utilisateur)
            <li>{{ $utilisateur->email }}</li>
        @endforeach
    </ul>
@endsection