Aller au contenu principal

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​

Installation / Configuration

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-notifier dans 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.

priorités

Plus la priorité est grande, plus tôt la méthode s'exécutera (documentation)