Dans l'optique d'aborder le Framework Symfony, j'ai créé un projet du type Google Drive
, dans lequel il est possible de stocker toute sortes de fichers
. Le but était de me confronter à la façon de gérer l'upload de fichiers par utilisateur avec Symfony.
Tout d'abord, configurons notre environnement.
J'ai simplement générer un formulaire d'upload de fichier, avec l'affichage de fichiers par catégorie (Photos, Videos, Audios...). J'ai aussi implémenter une Progress Bar pour indiquer à l'utilisateur ou en est son stockage en fonction de son abonnement.
J'ai intégré Easyadmin dans mon projet pour avoir un contrôle directe sur l'ensemble de ma base de donnée depuis mon projet.
Avec EasyAdmin, l'upload de fichier était assez simple à mettre en place. Pour ce qui est de la suppression, c'est une tout autre histoire...
La problématique était que quand je supprimais un Upload
dans EasyAdmin, le fichier correspondant dans /uploads/
ne se supprimait pas. Je trouve ça assez fourbe car une fois l'Upload supprimé, aucun message d'erreur ni d'avertissement nous indiquant quoi que ce soit tout à l'air de fonctionner.
Pour contrer ce problème, j'ai mis en place un Subscriber DeleteUploadSubscriber
qui s'assure qu'avant le remove
du Manager
, il me supprime le fichier correspondant dans /uploads/
. (L'idéal aurait été de le faire juste après le remove
).
J'ai créé un SubscriptionRegisteredEvent
au moment de l'inscription d'un User
. J'ai ensuite souscris à cet Event
pour envoyer un mail de remerciement à l'utilisateur (que j'ai d'ailleurs transformer en Service
) et envoyer une notification Discord
J'ai aussi créé un DeleteUserSubscriber
pour supprimer tout les Upload
du User
correspondant dans la base de donnée puis supprimer son dossier dans /uploads/
.
Le chiffrage de mot de passe aussi est un Subscriber
que je met en place juste avant le persist
du Manager
.
Je n'es créé qu'un seul EventListener
qui envoie dans les Response Headers le nom du Développeur du projet.
J'ai aussi exposé mon projet sous forme d'API si un utilisateur veut accéder à ses informations depuis son application ou autre.
Pour cela, je fais générer pour chaque User
un Token
lors de son inscription. Il y a accès depuis son espace Profil
dans la barre de navigation.
Ensuite il suffit juste d'indiquer l'Endpoint /api/dashboard
en méthode GET
puis d'insérer dans les Headers
son X-API-TOKEN
.
J'ai généré un formulaire de réinitialisation de mot de passe pour les utilisateurs.
En envoyant son email dans le formulaire, un lien unique est envoyé par mail pour avoir accès au formulaire de réinitialisation du User
concerné.
J'avais une légère problématique pour la modification d'informations dans Profil
, la modification n'était pas possible tant que le mot de passe n'était pas réindiquer, et ce n'était pas le but. J'ai préféré désactiver cette possibilité pour ne pas créer de problème de mot de passe.
Après la réalisation d'un projet PHP
sans framework, aborder Symfony est un pur régal 👨🏾🍳.
Plus sérieusement je n'imaginais pas à quel point ce framework pouvait nous ménager dans la réalisation d'un projet. Je suis assez satisfait dans ce que j'ai fourni je le pensais compliqué au départ, mais en le commençant petit à petit je me suis rendu compte que c'était largement faisable. J'imagine plusieurs fonctionnalités à l'avenir comme par exemple pouvoir uploadé plusieurs fichiers d'un coup, pouvoir créer une arborescence ou encore un système de partage de fichier...
En tout cas ce projet m'a permis de découvrir le Framework Symfony et de m'ouvrir à de nouvelles perspectives dans le développement Web.