Déclencher plusieurs actions
Et si, en plus de l'envoi d'email, on voulait déclencher une notification Discord ?
Dans ce cas, pas besoin de créer une nouvelle classe : on peut ajouter une méthode à notre subscriber actuel, puis indiquer qu'on veut appeler la méthode d'envoi d'email et la méthode de notification Discord, avec un ordre de priorité.
La méthode sendDiscordNotification
Pour envoyer des notifications Discord, il faut au préalable :
- Avoir créé un webhook dans le canal d'un serveur Discord
- Avoir installé le package
symfony/discord-notifierdans notre application - Avoir configuré une variable d'environnement
DISCORD_DSN
Dans notre classe NewsletterRegisteredSubscriber, on ajoute une méthode sendDiscordNotification :
public function sendDiscordNotification(NewsletterRegisteredEvent $event): void
{
$chatMessage = new ChatMessage('');
$discordOptions = (new DiscordOptions())
->username('My Discord Bot');
// Mise en forme de la notification...
$chatMessage->options($discordOptions);
$this->chatter->send($chatMessage);
}
Enregistrer la nouvelle méthode
Une fois la méthode créée, il ne reste plus qu'à l'enregistrer avec la première dans la méthode getSubscribedEvents(). Et on peut même leur assigner des priorités pour indiquer dans quel ordre elles doivent s'exécuter :
public static function getSubscribedEvents(): array
{
return [
NewsletterRegisteredEvent::NAME => [
['sendConfirmationEmail', 10],
['sendDiscordNotification', 5]
],
];
}
À présent, à l'exécution du contrôleur, et lors du dispatch de l'événement, les deux méthodes seront exécutées dans le bon ordre.
Plus la priorité est grande, plus tôt la méthode s'exécutera (documentation)