Laravel Blade est le moteur de template de Laravel. Il est simple et performant et en plus il recèle tout un tas de fonctionnalités qui méritent vraiment d’être explorées, notamment les directives blade et plus spécifiquement les directives blade personnalisées.

Aujourd’hui je vais te parler de ce que peuvent t’apporter les directives blade pour éviter dans nos templates Blade de faire du code spaghetti illisible.

Sommaire des Directives Blade

Les directives Blade permettent d'éviter le code spaghetti dans les templates

Directives Blade intégrées à Laravel

if, else, what else ?

Un grand classique, comme notre café Nespresso et notre illustre George !

Un petit George bien caféiné !! What else ?
Un petit George bien caféiné !! What else ?

D’ailleurs, aucun développeur digne de ce nom code sans une bonne machine à café. Voici, une bonne machine à café, robuste et fiable si tu souhaites t’équiper et rejoindre la guilde des développeurs caféinés !! 😀

C’est bon ? tu as ta dose de caféine ? Oui, alors on continue.

La directive Blade @if, @then et @else nous permet d’introduire la première forme de conditions dans nos templates Blade.

Comment ? Tu es bien curieux et tu as raison. Voyons à présent tout cela en détail.

@if (count($readedbooks) == 1)
   You have read only one book :-( !
@elseif (count($readedbooks > 1)
   Great, you have read many books :-)
@else
   Oh no, you don't have read any book :-( :-( :-( ...
@endif

Qu’est ce que nous apprends ce code ?

Le premier @if vérifie si la variable $readedbooks est égale à 1, si c’est le cas le template blade affichera le message : ‘You have read only one book 🙁 !’

Tu aurai pu lire un peu plus, non ?

L’instruction suivante @elseif permet de tester une autre condition. Ici avec ce @elseif tu vas tester si la variable $readedbooks est supérieure strictement à 1. Si c’est le cas, le template Blade affichera le message ‘Great, you have read many books :-)’

Toi, tu es le premier de la classe ou alors je ne m’y connais pas ! 😀

Enfin, regardes ce petit @else tout seul sans aucune condition à vérifier.
« A quoi sert il ? » t’entends je déjà chuchoter.

C’est un garde fou, mon prince. Si aucune des deux conditions évoquées plus haut n’est remplie, il rentre en action, tel le dernier bouclier contre la chute de l’humanité….

Oui, là j’avoue que là ça va un peu trop loin 😀

En fait, tout simplement ce @else va s’activer dans le cas où ici la variable $readedbooks est égale à zéro ou même en dessous (-1 par exemple). En fait, toute valeur qui n’est pas ‘1’ ou supérieur à ‘1’, donc par voie de conséquence tout ce qui est strictement inférieur à 1.

Pour conclure, la directive @endif permet d’indiquer au moteur qui interprète les fichiers de template Blade que nous en avons fini avec notre condition @if de départ.

Est ce plus clair ainsi à présent ? 😉

Quelques variantes bien pratiques : @isset, @empty @unless

Ces trois nouvelles directives vont te permettre de prendre des raccourcis avec les directives @if, @then et @else.

@isset et @empty vont te permettre d’effectuer le pendant de leur homonymes en fonctions php isset() et empty().

@isset($readedbooks)
    // $readedbooks is defined and is not null...
@endisset

@empty($readedbooks)
    // $readedbooks var is "empty"...
@endempty

@unless quant à elle permet l’affichage d’un morceau de template tant qu’une condition est vraie :

@unless (@empty($readedbooks))
   Oh no, you don't have read any book :-( :-( :-( ...
@endunless

Les directives d’authentification @auth, @guest

Elles aussi vont te faire gagner pas mal de temps, en vérifiant le statut des utilisateurs connectés ou pas d’ailleurs !

Tu peux les utiliser de façon très simple, comme ceci :

@auth
    // l'utilisateur est authentifié...
@endauth

@guest
    // L'utilisateur n'est pas authentifié, c'est un invité...
@endguest

Tu l’auras aisément compris, ces directives permettront l’affichage d’un contenu spécifique selon que l’utilisateur est connecté ou non.

Directives Blade personnalisées

Laravel fournit déjà un bon nombre de directives pour pallier à bien des situations. Mais il arrivera forcément un moment où il te sera nécessaire de créer tes propres directives.

Nous allons donc voir à présent commet créer ses propres directives.

Directives Blade : format monétaire

La situation est simple tu as besoin de formater un nombre dans un format monétaire.

Directives Blade : un nombre non formaté

Nous allons créer une directive ‘money‘ afin de nous aider à formater cela de façon efficace et élégante.

Dans le fichier AppServiceProvider.php, au sein de la fonction ‘boot‘, ajoutes cette directive :

        /**
         * Blade directive to format number to currency
         */
        Blade::directive('money', function ($expression) {
            /* return "<?php echo money_format('%+n', $expression); ?>"; */
            return "<?php echo number_format($expression, 2) . ' €'; ?>";
        });

Note bien la ligne commentée qui permet un formatage plus simple via la fonction dédiée de php money_format. Etant donné que je travaille sous Windows avec mon bon vieux Laragon, cette fonction ne m’est pas accessible, c’est pourquoi j’utilise une version bricolée à la Mc Gyver pour arriver au même résultat.
Si tu es sous un système Linux, tu peux utiliser sans problème la fonction money_format.

Une fois la directive mise en place, il est nécessaire de vider le cache des vues avec la commande :

php artisan view:clear

Il est maintenant possible d’utiliser la directive @money que nous venons de créer directement dans notre template Blade.

<div class="h1 mb-0 font-weight-bold text-gray-800 text-center">@money($giftsAmount / $giftsCount )</div>

Cela nous permettra de formater correctement notre bloc comme ci-dessous :

Directives Blade : un nombre au format monétaire grâce à une directive personnalisée

Directives Blade : le formatage des nombres décimaux

Evidemment une fois que l’on a vu le format monétaire, le formatage des nombres s’impose de lui-même.

Il découle directement de ce que l’on a vu plus haut et il est donc simple à programmer en reprenant l’existant :

      /**
         * Blade directive to format number with 2 decimals
         */
        Blade::directive('formatNumber', function ($expression) {
            return "<?php echo number_format($expression, 2); ?>";
        });

Après un petit nettoyage du cache de nos fichiers vues :

php artisan view:clear

un @formatNumber('100,456452') renverra 100,45.

Directives Blade : récupérer facilement des informations de configuration

Imagine que tu souhaites afficher fièrement le numéro de version de ta super nouvelle application :D.

Le numéro de version de ton application va logiquement prendre place dans votre fichier .env, par exemple sous l’intitulé ‘APP_VERSION‘ pour faire original.

APP_VERSION="v0.0.5"

A présent, dans le fichier app/config/app.php, rajoutes cette ligne :

   'version' => env('APP_VERSION', 'vx.x.x'),

Enfin nous créons une directive appelé ‘config‘ avec le code suivant :

        Blade::directive('config', function ($key) {
            return "<?php echo config('app.' . $key); ?>";
        });

Cette directive va aller chercher dans le fichier ‘app/config/app.php‘ la clé de configuration $key.

Il ne nous reste plus qu’à appeler dans notre template à l’endroit de notre choix la directive de la façon suivante :

@config('version')

Avec ce que nous avons défini précédemment, à la place de cette directive s’affichera le texte ‘v0.0.5’.

Conclusion sur les directives Blade

Nous avons vu dans ce petit article que Laravel dispose de plusieurs directives pour aider au quotidien dans la programmation des templates.
Nous avons également vu qu’il était facile de configurer des directives blade personnalisées.

N’oubliez pas que Laravel dispose d’un grand nombre de directives que vous pourrez retrouver dans la partie de la documentation consacrée à Blade.

Tu souhaite créer ton premier site avec Laravel et comprendre comment fonctionne ce framework ?
Je te propose de rejoindre ma formation qui parle exactement de cela !
Et comme je sais que tu es un lecteur assidu de ce blog, je t’offre 5% de réduction sur cette formation (avec le coupon ALDEW5).Tu hésites ? Je te comprends et je souhaite te préciser deux choses :

1. Mes élèves sont ma meilleure carte de visite :

Voici ce qu’ils pensent de cette formation

24/06/2020
Vraiment très bien conçu et dispensé. Le rythme est bon, clair, précis donc essentiel à une bonne compréhension. Les réponses aux questions sont dans le même esprit, donc … Un grand merci à Frédéric pour ce cours de qualité. Vivement le prochain !!

17/06/2020
Très bon cours ! Clair même pour un débutant (qui a des bases quand même). Formateur sympa 😉 vivement d’autre cours.

Retrouve tous les avis, sur la page de la formation 😉

2. Le prix est vraiment mini !
Le cours est à 25€ en prix normal et avec le coupon ALDEW5, il te revient à 23,75€ pour plus de 4h de formation !

Alors à tout de suite de l’autre côté, je l’espère !