VichUploaderBundle mapping dépendant de l'entité parente
Bonjour la communauté,
Je sèche sur un problème depuis quelques jours.
J'ai une entité photo qui peut être liée soit à une annonce (type de relation ManyToOne), soit à un profil (type de relation OneToOne). Je voudrais que les photos liées aux annonces et celles liées à un profil soient stockées dans des répertoires différents.
Je sais qu'il existe une configuration au niveau du fichier "vich_uploader.yaml", via la définition de mappings. Egalement, je sais que c'est au niveau de la propriété "file" qu'on indique quel mapping il faut utiliser.
Voici ma configuration actuelle :
- dans "vich_uploader.yaml" :
Code:
1 2 3 4 5 6 7 8 9
| mappings:
adverts_photos:
uri_prefix: /images/adverts
upload_destination: '%kernel.project_dir%/public/images/adverts'
namer: Vich\UploaderBundle\Naming\UniqidNamer
profiles_photos:
uri_prefix: /images/profiles
upload_destination: '%kernel.project_dir%/public/images/profiles'
namer: Vich\UploaderBundle\Naming\UniqidNamer |
- au niveau de mon entité "Photo.php" :
Code:
1 2 3 4 5 6 7 8
| /**
* @var File|null
* @Assert\Image(
* mimeTypes="image/jpeg"
* )
* @Vich\UploadableField(mapping="adverts_photos", fileNameProperty="name")
*/
private $file; |
Au niveau de mon entité "Photo", j'ai 2 attributs qui me permettent de distinguer si c'est une photo liée à une annonce ou à un profil :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\advert\Advert", inversedBy="photos")
* @ORM\JoinColumn(nullable=true)
*
* @Assert\Type(type="App\Entity\advert\Advert")
* @Assert\Valid()
*/
private $advert;
...
/**
* @ORM\OneToOne(targetEntity="App\Entity\User\Profile", mappedBy="photo")
*/
private $profile;
... |
Mon but est donc de modifier la ligne
Code:
* @Vich\UploadableField(mapping="adverts_photos", fileNameProperty="name")
en
Code:
* @Vich\UploadableField(mapping="profiles_photos", fileNameProperty="name")
lorsqu'il s'agit d'une photo liée à un profil.
Quelqu'un aurait une idée sur la manière de procéder?
Merci d'avance pour votre aide.