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"
>×</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('/');
}