L’envoi de notifications en temps réel peut surcharger votre application Laravel.
Cette surcharge peut entraîner des ralentissements et des erreurs, affectant l’expérience utilisateur.
Découvrez comment utiliser les notifications asynchrones et Laravel Horizon pour gérer efficacement ces processus.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.
Explication du schéma :
- Utilisateur ajoute un commentaire :Un autre utilisateur publie un commentaire sur un article.
- Notification créée pour l’auteur :Une notification est créée pour l’auteur de l’article pour l’informer du nouveau commentaire.
- Envoi de la notification via canaux :La notification peut être envoyée via différents canaux (email, SMS, etc.).
- Notification en file d’attente :La notification est placée dans la file d’attente pour un envoi asynchrone.
- Gestion via Horizon :Horizon permet de gérer les jobs en file d’attente pour traiter les notifications.
- Surveillance des jobs :Horizon surveille le statut des jobs, permettant une gestion efficace.
- Gestion des failed jobs :Horizon aide à détecter et gérer les jobs échoués pour garantir que les notifications sont envoyées.
- Notification envoyée à l’auteur :L’auteur reçoit la notification sur l’ajout du commentaire.
Notification Laravel dans CommentController
La première étape consiste à modifier le contrôleur de commentaires pour envoyer une notification lorsqu’un utilisateur poste un commentaire. Voici comment vous pouvez faire cela.
En ajoutez la notification dans la méthode store pour envoyer une notification à l’auteur de l’article. Vous utiliserez la notification NewComment que nous avons définie précédemment.
use App\Notifications\NewComment;
public function store(CommentRequest $request, Article $article)
{
$validatedData = $request->validated();
$validatedData['user_id'] = auth()->id();
// Crée le commentaire
$comment = $article->comments()->create($validatedData);
// Vérifie si l'utilisateur n'est pas l'auteur de l'article
if (auth()->id() !== $article->user_id) {
// Définit un délai de 10 secondes avant d'envoyer la notification
$when = now()->addSeconds(10);
// Envoie la notification à l'auteur de l'article avec un délai
$article->user->notify((new NewComment($comment))->delay($when));
}
$success = 'Commentaire ajouté.';
return back()->withSuccess($success);
}
- Vérification de l’utilisateur :Si l’utilisateur connecté (le commentateur) n’est pas l’auteur de l’article ($article->user_id), alors une notification est envoyée à l’auteur.
- Délai d’envoi de la notification :La notification est envoyée avec un délai de 10 secondes. Cela permet d’atténuer l’impact sur les performances en attendant un peu avant d’envoyer la notification.
Modifier Notification pour Commentaire Laravel
Ensuite, vous devez ajuster la notification pour inclure des informations supplémentaires dans l’e-mail envoyé à l’utilisateur. Nous allons ajouter des détails dans le corps du mail, tels que le nom de l’utilisateur qui a commenté, le titre de l’article, et un lien pour voir le commentaire.
Code modifié de NewComment :
comment = $comment;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage())
->subject('Nouveau commentaire')
->greeting('Bonjour '.$this->comment->article->user->name)
->line('Vous avez reçu un nouveau commentaire de la part de '.$this->comment->user->name)
->line('L\'article est : '.$this->comment->article->title)
->action('Voir le commentaire', route('articles.show', ['article' => $this->comment->article->slug]))
->salutation('A bientôt sur '.config('app.name'));
}
public function toArray($notifiable)
{
return [
//
];
}
}
Explication du code :
- Champs personnalisés dans l’email :Le sujet, la salutation et les lignes de contenu de l’e-mail sont personnalisés pour informer l’auteur de l’article d’un nouveau commentaire.
- Action dans l’e-mail :Le lien permet à l’utilisateur de voir le commentaire en cliquant sur un bouton, ce qui est pratique pour l’inciter à visiter l’article.
Tester Notifications Commentaire Laravel
Lorsque vous ajoutez un commentaire comme « je teste la notification » , le processus complet devrait être :
- Le commentaire est ajouté par l’utilisateur.
- Si l’utilisateur n’est pas l’auteur de l’article, une notification est envoyée à l’auteur de l’article après un délai de 10 secondes.
- Vous devriez voir cette notification dans Mailtrap (si vous utilisez un outil de test d’e-mails) et vérifier que l’email contient les informations attendues.
Notification Asynchrone avec Laravel Jobs
Afin de traiter les notifications de manière asynchrone et éviter de bloquer le flux principal de votre application, vous devez implémenter ShouldQueue dans la classe NewComment.
Cela permet de mettre la notification en file d’attente et de la traiter plus tard par un worker, ce qui améliore les performances.
Nous avons déjà ajouté implements ShouldQueue dans la classe NewComment, ce qui signifie que la notification sera traitée en file d’attente.
Et après d’ajouter cette modification a la classe newComment en test avec l’envoi d’une autre commentaire comme « Hey! C’est moi qui parle ! » comme ceci :
Configurer Horizon pour Notifications Laravel
Si vous souhaitez travailler dans un environnement sombre, vous pouvez activer le mode sombre en décommentant la ligne suivante dans le fichier HorizonServiceProvider.php :
public function boot(): void
{
parent::boot();
Horizon::night();
}
Cela changera l’interface de Horizon pour un thème sombre, ce qui peut être plus agréable pour les développeurs travaillant de nuit.
Surveiller Jobs avec Laravel Horizon
Maintenant que la notification est mise en file d’attente, vous pouvez superviser son traitement dans Horizon .
- Ouvrez Horizon dans votre navigateur (par défaut http ://localhost/horizon).
- Vous y trouverez une section pour « Completed Jobs » où vous pouvez voir les jobs en cours et vérifier que la notification est bien en attente de traitement.
- Si vous souhaitez tester l’échec d’un job, vous pouvez simuler une erreur dans le code. Par exemple, décommentez la ligne qui appelle ->line(‘L\’article est :’.$this->comment->article->title) et provoquez une erreur, ce qui entraînera un échec du job.
Cela fera échouer le job, et vous pourrez observer l’échec dans la section « Failed Jobs » de Horizon.
Conclusion : Gestion des Notifications Laravel
Dans cet axe, nous avons appris à envoyer une notification lorsqu’un utilisateur poste un commentaire. Nous avons exploré comment mettre cette notification en file d’attente et la gérer avec Laravel Horizon. Nous avons également vu comment tester les jobs échoués et configurer l’interface Horizon en mode sombre pour une meilleure expérience utilisateur.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment envoyer une notification quand un commentaire est ajouté?
Pourquoi utiliser Laravel Horizon pour les notifications?
Comment personnaliser l'email de notification dans Laravel?
Comment tester les notifications dans Laravel sans les envoyer?
Comment gérer les notifications échouées dans Laravel?
Conclusion
En conclusion, maîtriser l’envoi de notifications dans Laravel via Horizon permet d’optimiser la gestion des interactions utilisateur. Quelle autre fonctionnalité de Laravel Horizon souhaitez-vous explorer?