Formation PUB030 : Laravel, 2019 Blade : le moteur de vue

8.1 Une syntaxe simplifiée dans vos vues avec Blade


Blade est le moteur de vue utilisé par Laravel. Il offre une syntaxe simplifiée pour exécuter de petits bouts de code dans une vue, par exemple pour vérifier une condition avant d'afficher une information ou encore pour boucler dans une collection.

Par exemple, il serait possible de boucler dans une collection à l'aide de la syntaxe PHP :

Vue Laravel sans Blade

<?php foreach($produits as $produit) : ?>
    <li><?= $produit->description; ?></li>
<?php endforeach; ?>

Avec Blade, le code est beaucoup plus clair :

Vue Laravel (Blade)

@foreach($produits as $produit)
    <li>{{ $produit->description }}</li>
@endforeach

▼Publicité Le texte se poursuit plus bas

ABC de la syntaxe Blade

À la base, tout ce que vous écrivez dans une vue sera transmis tel quel par Blade au navigateur. Vous pouvez donc entrer sans plus de flafla les balises HTML et le texte statique.

Il existe cependant des exceptions afin de permettre d'entrer des commentaires, d'afficher des variables, de tester des conditions et de faire des boucles.

Les commentaires

Lorsque vous ajoutez un commentaire avec Blade, vous êtes assurés qu'il ne fera pas partie du code HTML généré.

Vue Laravel (Blade)

{{-- menu principal ************************************************************************* --}}

Les fonctions PHP

Il est possible d'exécuter des fonctions PHP en les plaçant entre les symboles {{ et }}.

Vue Laravel (Blade)

{{ route('produits.index') }}

Afficher une variable

Pour afficher le contenu d'une variable (que le contrôleur a transmis à la vue), simplement placer son nom entre {{ et }}.

Vue Laravel (Blade)

{{ $produit->description }}

Remarquez que Blade se charge automatiquement de protéger contre certaines attaques XSS en appliquant la fonction htmlentities() sur le contenu ainsi affiché.

Valeurs non protégées (unescaped data)

Il peut arriver, dans un contexte particulier, que les variables doivent être affichées sans passer par htmlentities(). Vous pouvez y arriver comme suit :

Vue Laravel (Blade)

{!! $variable !!}

Attention : avec les points d'exclamation, votre site devient vulnérable aux attaques XSS. Vous devriez toujours utiliser les doubles accolades à moins d'avoir un besoin très particulier.

La variable est-elle non nulle ?

Pour vérifier si une variable existe :

Vue Laravel (Blade)

@if (isset($variable))
    ...
@endif

Valeur à utiliser si la variable est nulle

Il est possible de spécifier une valeur à utiliser lorsqu'une variable est nulle.

L'opérateur PHP « ?: » est un opérateur binaire connu sous le nom opérateur Elvis.

En fait, cet opérateur utilisera la valeur de remplacement lorsque le premier opérande est évalué à false ou à null.

Vue Laravel (Blade)

{{ $variable ?: 'Valeur à utiliser si nul ou faux' }}

L'opérateur Elvis est équivalent à cette syntaxe qui utilise l'opérateur ternaire :

Vue Laravel (Blade)

{{ $variable ? $variable : 'Valeur à utiliser si nul ou faux' }}

Un résultat semblable sera obtenu à l'aide de l'opérateur de fusion null « ?? ».

La différence, c'est que l'opérateur de fusion null utilisera la valeur de remplacement lorsque le premier opérande est null ou lorsque la variable n'existe pas.

 

Vue Laravel (Blade)

{{ $variable ?? 'Valeur à utiliser si nul ou inexistant' }}

L'opérateur de fusion null est équivalent à cette syntaxe qui utilise l'opérateur ternaire :

Vue Laravel (Blade)

{{ isset($variable) ? $variable : 'Valeur à utiliser si nul' }}

La collection contient-elle au moins un élément ?

Pour vérifier si une collection contient au moins un élément :

Vue Laravel (Blade)

@if (!$produits->count())
    <p>Il n'y a présentement aucun produit.</p>
    <div><a class="stylebouton" href="{{ route('produits.create') }}">Ajouter</a></div>
@else
    ...
@endif

Les structures de contrôle

Pour tester une condition :

Vue Laravel (Blade)

@if (...)
    ...
@elseif (...)
    ...
@else
    ...
@endif

Pour boucler dans les éléments d'une collection :

Vue Laravel (Blade)

@foreach ($produits as $produit)
    ...
@endforeach

L'intégration de code PHP dans Blade

Dans la majorité des cas, la logique de l'application sera faite dans le contrôleur ou dans un autre fichier spécifique. La vue ne fera que de l'affichage avec possiblement quelques structures de contrôle.

Il existe pourtant des cas précis où le code sera plus clair si on ajoute un peu de PHP, par exemple l'initialisation d'une variable qui clarifiera le code qui suit.

Pour cela, il faut utiliser la directive @php.

Blade

@php
    $uneVariable = ...;
@endphp

Pour plus d'information

« Blade Templates ». Laravel. https://laravel.com/docs/master/blade

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 18 mai 2021
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre