Salut,
En fait j'ai trouvé une solution il y a quelques jours. vue que tu dois faire la même chose, je vais poster ma solution peut être qu'elle te sera utile ou qu'elle sera utile a quelqu'un :) .
Pour reprendre ma situation et que toute le monde comprennent bien, j'ai une entity CategoriePhoto et une entity Photo
ce que je voulais faire c’était de pouvoir envoyer grâce à une champ file plusieurs photos d'un coup pour la même CategoryPhoto.
(du genre je mets 20 photos dans cette album), dans ce poste je n'affiche que le code pour gérer le multi-upload.
J'ai donc utilisé un transformer(convertisseur de données), voici mon code :
Dans mon formulaire :
$builder
->add(
$builder->create('fileImg', 'file', 'data_class' => null,'multiple' => true,])
->addModelTransformer(new FilesTransformer()))
ici fileImg est un champ virtuel interprété par la classe Uplaodedfile de symfony dans mon entity Photo
on passe multiple a true
et on ajoute le modelTransformer avec la fonction que voici :
pour vous aidez à bien comprendre, voir la doc : doc-symfony-convertisseur-de-données
public function reverseTransform($files)
{
$photos = ];
foreach($files as $file){
$photo = new Photo();
$photo->setFileImg($file);
$photos] = $photo;
}
return $photos;
}
Donc pour chacune des photos uploadé avec le champ fileImg, on crée une nouvelle entity Photo, puis on les retournes.
Dans mon controller , quand le form est valide:
$files = $form->get('fileImg')->getData();
foreach($files as $file)
{
$file->preUpload();
$file->upload();
$em->persist($file);
$em->flush($file);
}
je récupère les entités, je les parcoures, pour ensuite Upload et les sauvegarder dans ma BDD.
( preUpload concerne le renommage des fichiers uploadé, voir la doc de symfony pour l'upload des fichiers, j'utilise les même méthode )
Voila j'espère que j'ai été clair et que cela pourra vous aider.