Aller plus loin
Pistes optionnelles : e-mails, internationalisation, tests, logs, tâches planifiées et messages asynchrones.
Dans cet atelier, nous allons voir des fonctionnalités supplémentaires pour améliorer notre application Symfony.
Astuce
Cet atelier n'aura pas de consignes "sur des rails" comme les autres ; mais simplement des sujets à explorer et quelques consignes pour creuser l'amélioration de l'application.
Envoi de mail
Symfony dispose d'un composant Mailer et Notification très puissant pour envoyer des emails.
Documentation :
En installant symfony/mailer, un service MailPit sera ajouté à votre stack docker. Vous devrez la redémarrer (down + up -d) pour l'avoir de dispo.
Consigne
Pistes d'améliorations
- Implémentez l'envoi d'un email de bienvenue lors de la création d'un nouvel utilisateur.
- Vous pouvez créer un service
UserServicepour gérer la logique métier liée aux utilisateurs.
- Vous pouvez créer un service
- Implémentez la validation par email lors de l'inscription.
- Ajoutez les champs nécessaires dans l'entité User (token de validation, date d'expiration, email, etc.).
- Créez une route et un contrôleur pour gérer la validation de l'email.
- Créez un email avec un lien de validation à envoyer à l'utilisateur lors de son inscription.
- Vous devriez regarder la documentation Symfony, un exemple y est donné.
- Implémentez l'envoi d'un mail lors de la création d'une dépense.
Internationalisation (i18n)
Symfony propose un composant Translation pour gérer l'internationalisation de votre application.
Documentation :
Consigne
Pistes d'améliorations
- Ajoutez la prise en charge de plusieurs langues dans votre application (par exemple, français et anglais).
- Configurez le composant Translation dans votre application.
- Créez des fichiers de traduction pour les différentes langues.
- Modifiez vos templates Twig pour utiliser les fonctions de traduction.
- Ajoutez un sélecteur de langue dans la page de paramètre pour permettre aux utilisateurs de choisir leur langue préférée.
- Stockez la langue préférée de l'utilisateur dans la base de données et appliquez-la lors de sa connexion.
Tests fonctionnels avec Panther
Symfony Panther est un outil permettant d'écrire des tests fonctionnels en utilisant un navigateur réel.
Documentation :
Consigne
Pistes d'améliorations
- Écrivez des tests fonctionnels pour les principales fonctionnalités de votre application (inscription, connexion, création de portefeuille, ajout de dépense, etc.).
- Créez une classe de test fonctionnel dans le dossier
tests/Functional. - Utilisez Panther pour simuler les interactions utilisateur avec l'application.
- Créez une classe de test fonctionnel dans le dossier
- Assurez-vous que les tests couvrent les cas d'utilisation principaux et les scénarios d'erreur.
Gestion des erreurs & logs
Symfony dispose d'un composant Monolog pour gérer les logs et les erreurs dans votre application.
Documentation :
Consigne
Pistes d'améliorations
- Configurez Monolog pour enregistrer les logs dans des fichiers spécifiques (par exemple, un fichier pour les erreurs, un autre pour les accès, etc.).
- Ajoutez des logs dans les services et les contrôleurs pour suivre les actions importantes (création de portefeuille, ajout de dépense, etc.).
Scheduler & Commandes
Symfony permet de créer des commandes CLI personnalisées et de les planifier avec un scheduler.
Documentation :
- https://symfony.com/doc/current/console.html
- https://symfony.com/doc/current/components/scheduler.html
Consigne
Pistes d'améliorations
- Créez une commande CLI pour envoyer des rapports hebdomadaires par email aux utilisateurs avec le résumé de leurs dépenses.
- Utilisez le composant Console pour créer la commande.
- Utilisez le composant Mailer pour envoyer les emails.
- Planifiez cette commande pour qu'elle s'exécute automatiquement chaque semaine.
- Vous pouvez utiliser des outils comme cron ou le composant Scheduler de Symfony.
Messenger
Symfony Messenger est un composant permettant de gérer des tâches asynchrone dans votre application.
Documentation :
Consigne
Pistes d'améliorations
- Utilisez Messenger pour gérer l'envoi d'emails de manière asynchrone.
- Créez un message pour représenter l'email à envoyer.
- Créez un handler pour traiter ce message et envoyer l'email.
- Modifiez le service d'envoi d'email pour utiliser Messenger au lieu d'envoyer l'email directement.
- Utilisez Messenger pour effectuer des calculs de balance entre utilisateurs de manière asynchrone.
- Créez un message pour représenter la tâche de calcul de balance.
- Créez un handler pour traiter ce message et effectuer le calcul.
- Modifiez le service de gestion des portefeuilles pour utiliser Messenger pour le calcul des balances.