Système de Notification
Introduction
À propos du système de messaging
Le système de messaging de BowPHP est un outil puissant qui permet d'envoyer des notifications via différents canaux (email, base de données, SMS). Il est conçu pour être flexible, extensible et facile à utiliser.
Que vous ayez besoin d'envoyer des emails de bienvenue, des notifications d'activité ou des alertes système, le système de messaging vous couvre.
Configuration
Préparation du Modèle
Pour commencer, votre modèle doit utiliser le trait WithNotifier. Ce trait ajoute toutes les méthodes nécessaires pour envoyer des notifications.
use Bow\Notifier\WithNotifier;
use Bow\Database\Barry\Model;
class User extends Model
{
use WithNotifier;
}
Création de Notifications
Structure de Base
Une notification est une classe qui étend Notifier. Voici un exemple complet d'une notification de bienvenue :
use Bow\Notifier\Notifier;
use Bow\Mail\Envelop;
use Bow\Database\Barry\Model;
class WelcomeNotifier extends Notifier
{
/**
* Constructeur - passe des données à la notification
*/
public function __construct(
private string $customMessage = "Bienvenue!"
) {
}
/**
* Configure le message email
*/
public function toMail(Model $context): ?Envelop
{
return (new Envelop())
->to($context->email)
->subject('Bienvenue sur notre plateforme!')
->view('emails.welcome', [
'user' => $context,
'message' => $this->customMessage
]);
}
/**
* Configure la notification en base de données
*/
public function toDatabase(Model $context): array
{
return [
'type' => 'welcome_notification',
'data' => [
'user_id' => $context->id,
'message' => $this->customMessage,
'created_at' => now()
]
];
}
/**
* Définit les canaux à utiliser
*/
public function channels(Model $context): array
{
// Vous pouvez ajouter une logique conditionnelle
if ($context->preferences['email_notifications']) {
return ['mail', 'database'];
}
return ['database'];
}
}
Exemples de Notifications Courantes
Notification de Réinitialisation de Mot de Passe
class PasswordResetNotifier extends Notifier
{
public function __construct(
private string $token
) {
}
public function toMail(Model $context): Envelop
{
$resetUrl = url("/password/reset/{$this->token}");
return (new Envelop())
->to($context->email)
->subject('Réinitialisation de votre mot de passe')
->view('emails.password-reset', [
'user' => $context,
'resetUrl' => $resetUrl,
'expiresIn' => '60 minutes'
]);
}
public function channels(Model $context): array
{
return ['mail'];
}
}