Utilisation de bibliothèques externes

Dans ce tutoriel nous allons voir comment ajouter des messages flash avec une bibliothèque écrite par un autre développeur.

laracasts/flash

Pour installer cette bibliothèque, nous allons avoir besoin de lancer une commande Composer :

composer require laracasts/flash

Cette commande va télécharger la bibliothèque et l'ajouter aux dépendances de notre projet dans le composer.json.

Utilisation de la nouvelle fonction flash()

Dans le contrôleur CompteController nous pouvons ajouter un message flash de type error avant de rediriger l'utilisateur :

if (auth()->guest()) {
    flash("Vous devez être connecté pour voir cette page.")->error();

    return redirect('/connexion');
}

Mais rien ne s'affiche car nous n'avons pas encore dit à Laravel à quel endroit de la vue afficher le message.

Inclure la vue de la bibliothèque

Pour ajouter la vue flash::message dans notre layout je vais modifier notre layout.blade.php juste avant le contenu :

<div class="container">
    @include('flash::message')

    @yield('contenu')
</div>

Le message s'affiche mais sans aucun style CSS.

Modifier la bibliothèque pour Bulma

La bibliothèque est faite pour être utilisé avec Bootstrap alors que notre projet utilise Bulma. Nous pouvons modifier la vue en utilisant la commande vendor:publish de Laravel :

php artisan vendor:publish --provider="Laracasts\Flash\FlashServiceProvider"

Nous pouvons maintenant modifier la vue dans ressources/views/vendor/flash/message.blade.php pour utiliser les classes de Bulma :

@foreach (session('flash_notification', collect())->toArray() as $message)
    @if ($message['overlay'])
        @include('flash::modal', [
            'modalClass' => 'flash-modal',
            'title'      => $message['title'],
            'body'       => $message['message']
        ])
    @else
        <div class="message
                    is-{{ $message['level'] }}
                    {{ $message['important'] ? 'alert-important' : '' }}"
                    role="alert"
        >
            @if ($message['important'])
                <button type="button"
                        class="close"
                        data-dismiss="alert"
                        aria-hidden="true"
                >&times;</button>
            @endif
            <div class="message-body">
                {!! $message['message'] !!}
            </div>
        </div>
    @endif
@endforeach

{{ session()->forget('flash_notification') }}

Le message s'affiche maintenant avec la bordure rouge.

Ajout des autres messages

Dans ConnexionController@traitement :

if ($resultat) {
    flash("Vous êtes maintenant connecté.")->success();

    return redirect('/mon-compte');
}

Et dans CompteController :

public function deconnexion()
{
    auth()->logout();

    flash("Vous êtes maintenant déconnecté.")->success();

    return redirect('/');
}