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 yaml : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
* @Vich\UploadableField(mapping="adverts_photos", fileNameProperty="name")
en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
* @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.