Salut j'essai de creer un formulaire pour ajouter un produit en base de données mais je stagne au niveau de
la création du champ d'uploading du fichier image.

Le champs

->add('images', FileType::class, [
                'required' => false,
                'label' => 'Image:Format(JPEG, PNG, ou GIF)',
                'attr'=>[
                    'class'=>'uploadArticleImg',
                ],
                'constraints' => [
                    new NotBlank([
                        'message'=>'Importez une image'
                    ]),
                    new File([
                        'maxSize' => '5M',
                        'mimeTypes' => [
                            'image/jpeg',
                            'image/png',
                            'image/gif',
                        ],
                        'mimeTypesMessage' => 'Le format de cette image n\'est pas autorisé',
                        'maxSizeMessage' => 'L\'image est trop volumineuse. Limite:{{ limit }}',
                    ]),
                ],
            ])

La configuration

public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => Products::class,
        ]);
    }

L'antité Product

  #[ORM\OneToMany(mappedBy: 'products', targetEntity: Images::class, orphanRemoval: true)]
    private Collection $images;

    public function __construct()
    {
        $this->images = new ArrayCollection();
    }
    *
    *
    *
    /**
     * @return Collection<int, Images>
     */
    public function getImages(): Collection
    {
        return $this->images;
    }

    public function addImage(Images $image): self
    {
        if (!$this->images->contains($image)) {
            $this->images->add($image);
            $image->setProducts($this);
        }

        return $this;
    }

    public function removeImage(Images $image): self
    {
        if ($this->images->removeElement($image)) {
            // set the owning side to null (unless already changed)
            if ($image->getProducts() === $this) {
                $image->setProducts(null);
            }
        }

        return $this;
    }

Ce que je veux
Ce souhaite ajouter ce champ image du produit en meme temps que toutes
les informations liées à ce produit via l'antité Products

Ce que j'obtiens

The form's view data is expected to be a "Symfony\Component\HttpFoundation\File\File", but it is a "Doctrine\Common\Collections\ArrayCollection". You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms "Doctrine\Common\Collections\ArrayCollection" to an instance of "Symfony\Component\HttpFoundation\File\File".

2 réponses


Bonjour,
Tu peux te référer à cette documentation : https://symfony.com/doc/current/controller/upload_file.html. Cela t'aidera peut être :).
L'utilisation du bundle VichUploader est une meilleure solution je pense !

Merci beaucoup frere Nathe