2015-03-30 1 views
1
téléchargement

J'ai mis en place VichUploaderBundle avec SonataAdmin et je wan't à l'entité de catégorie image télécharger en utilisant sonate.SonataAdmin + VichUploader pas l'image

formulaire est rendu OK, entité de sauvegarde est Ok, envoyer des données et l'image multipart est là. Mais ce n'est pas enregistré et il n'y a aucune erreur ou quelque chose pour déboguer cela.

config:

vich_uploader: 
db_driver: orm 
mappings: 
    category_image: 
     uri_prefix: /uploads/images/category 
     upload_destination: %kernel.root_dir%/../web/uploads/images/category 
     inject_on_load: true 
     delete_on_remove: true 
     delete_on_update: true 
     namer: vich_uploader.namer_origname 

CategoryAdmin:

 $formMapper 
     ->add('title', 'text', ['label' => 'title']) 
     ->add('description', 'textarea', ['required' => false, 'label' => 'description']) 
     ->add('image', 'file', 
      [ 
       'required' => false, 
       'label' => 'image', 
       'data_class' => 'Symfony\Component\HttpFoundation\File\File', 
       'attr' => ['class' => 'sonata-medium-file'], 
      ] 
     ); 

CategoryEntity:

/** 
* @ORM\Column(type="string", length=255, name="image_name", nullable=true) 
*/ 
protected $imageName; 
/** 
* @Assert\File(
*  groups={"list"}, 
*  maxSize="500k", 
*  mimeTypes={"image/png", "image/jpeg", "image/pjpeg"}, 
*  mimeTypesMessage = "constraint.mime_type" 
*) 
* @Vich\UploadableField(
*  mapping="category_image", 
*  fileNameProperty="imageName" 
*) 
* @var File $image 
*/ 
protected $image; 

POST: contenu

Content-Disposition: form-data; name="s5519586317457[image]"; filename="ico.png" 

Content-Type: image/png

file form

+0

contrôle [ce] (https://github.com/dustin10/VichUploaderBundle/issues/96#issuecomment-12135146) numéro connu – Matteo

Répondre

2

Il y a deux choses à savoir avec VichUploaderBundle et Doctrine:

  • si le seul champ mis à jour par la forme est le fichier, Doctrine a gagné » t détecter le changement et il ne sera pas persisté (ce link explique pourquoi et comment contourner cela);
  • l'ensemble déclenche le mécanisme de téléchargement uniquement lorsque des objets Symfony\Component\HttpFoundation\File\UploadedFile sont présents dans les champs téléchargeables. Par conséquent, la définition d'une option data_class pour vos champs interrompt ce processus (vous pouvez le supprimer en toute sécurité).

NB: vous pouvez également vérifier que votre entité est définie comme @Vich\Uploadable

+0

Merci beaucoup, j'ai oublié d'ajouter l'annotation '@Vich \ Uploadable' et j'ai supprimé data_class. – zajca

+0

même sans Sonata et ayant vos suggestions mises en œuvre, le fichier ne télécharge toujours pas pour moi. $ metadata = $ this-> reader-> getMetadataForClass ($ class) dans isUploadable ($ object) renvoie null. Comment puis-je réparer cela? – apfz

+0

@apfz Je suis confronté au même problème. $ this-> reader-> getMetadataForClass ($ class) renvoie null. Avez-vous déjà réussi à résoudre le problème? –