Laravel – Les vues dynamiques

Temps de lecture : 10 minutes environ.

Les pages statiques ne suffisent pas pour animer un site, il est nécessaire de créer des vues dynamiques dont le contenu proviendra de la base de données.

Nous allons partir du principe que nous avons deux variables générées par le contrôleur :

  • $articles contiendra une liste d’articles (titre, contenu, date, auteur)
  • $article contiendra les informations d’un seul article

Nous aurons deux vues, l’une affichera une liste d’articles, l’autre les détails d’un seul article, donc le contenu de nos variables.

Le contrôleur retournera donc la vue de la façon suivante

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class articlesController extends Controller
{
public function articles(){
// Ici se trouvera le code qui récupèrera la liste des articles
// la variable $articles contient une liste d'articles
return view('articles', ['listeArticles' => $articles]); // La vue articles aura accès à la liste sous le nom listeArticles
}
public function article(){
// Ici se trouvera le code qui récupèrera un article
// la variable $article contient un seul article
return view('article', ['article' => $article]); // La vue article aura accès à un seul article sous le nom article
}
}

Accès à des données multiples

Lors de la création de la vue, nous devons connaître le type de données qui sont transmises. La variable listeArticles contient une liste d’articles, donc nous devront parcourir cette liste avec une boucle.

Voici le code de la vue qui affichera la liste des articles

@extends('layouts.layout')

@section('title', "Liste des articles")

@section('content')
<h2>Liste des articles</h2>

@foreach ($listeArticles as $single) <!-- Boucle qui parcourt la variable listeArticles -->
<article>
<h3>{{ $single->titre }}</h3> <!-- chaque champ de la variable $single s'affiche entre {{ }}, syntaxe de Blade -->
<p>Publié le {{ $single->date }} par {{ $single->auteur }}</p>
<div class="content">
{{ $single->contenu }}
</div>
</article>
@endforeach
@endsection

Accès à une donnée « unique »

Si le contrôleur envoie une seule ligne de données, la vue n’aura pas besoin de boucle, la variable étant directement accessible.

@extends('layouts.layout')

@section('title', $article->titre) <!-- Nous pouvons utiliser la variable pour le titre de la page -->

@section('content')
<article>
<h2>{{ $article->titre }}</h2> <!-- chaque champ de la variable $article s'affiche entre {{ }}, syntaxe de Blade -->
<p>Publié le {{ $article->date }} par {{ $article->auteur }}</p>
<div class="content">
{{ $article->contenu }}
</div>
</article>
@endsection

Partager des données avec toutes les vues

Il peut parfois être nécessaire d’accéder à des données dans plusieurs vues, voire toutes.

C’est tout à fait possible en ajoutant quelques lignes à la fonction boot (fonction de démarrage) de Laravel.

Cette fonction se situe dans le fichier app/providers/appServiceProvider.php

Si nous souhaitons, par exemple, passer une liste de catégories à toutes les vues, nous allons ajouter les lignes suivantes

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use App\categories as Categories; // ici un exemple de modèle, à adapter à votre cas


class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$cats = Categories::orderBy('catOrder', 'asc')->get(); // Ici nous sélectionnons toutes les catégories
View::share('cats', $cats); // Nous partagons le contenu de la variable $cats avec toutes les vues
}

/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Laravel – Les vues dynamiques
Article publié le

Catégories : MVC Laravel Tutoriel

Mots-clés : Tutoriel Framework Laravel MVC Views

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn