Envoi de fichiers — Formation Symfony 7
Symfony permet la gestion de fichier avec une classe qui permet de représenter les fichiers envoyés. Cette classe contiendra une méthode move()
qui permettra de le déplacer dans le système de fichier du serveur.
Via le formulaire
Côté formulaire on peut définir un champs qui accueillera le fichier.
->add('thumbnailFile', FileType::class, [
'required' => false,
'constraints' => [new Image()],
'mapped' => false,
])
mapped permet d’indiquer que le champs n’est pas relié à une donnée de l’entité (il n’essaiera pas de récupérer la valeur ni de trouver le setter qui correspondra).
Ensuite, côté Controller on peut récupérer le fichier envoyé en utiliser la donnée contenue dans le formulaire.
$file = $form->get('thumbnailFile')->getData(); // UploadedFile
if ($file) {
$file->move(sprintf(
"%s/public/image/monfichier.%s",
$this->getParameter('kernel.project_dir'),
$file->getOriginalExtension()
));
}
Si le dossier de destination n’existe pas, il sera automatiquement créé par Symfony.
A vous ensuite d’ajouter la logique pour persister le nom du fichier en base de données et gérer la suppression lorsque l’entité est supprimée. Pour interagir avec le système de fichier il est possible d’utiliser le composant FileSystem.
VichUploaderBundle
Pour gérer plus facilement le système d’envoi de fichier il est possible d’utiliser le bundle VichUploaderBundle qui permet d’attacher automatiquement un système d’upload de fichier aux évènements de notre entité.