2017-11-19 3 views
0

Ich würde ein Formular mit mehrere Datei-Upload in Symfony 3 gerne schaffen, aber es funktioniert nicht, ich habe einen Fehler in meinem Controller:Formular mit mehrere Datei-Upload in Symfony 3

Erwartungswerte vom Typ Lehre“ \ Common \ Collections \ Collection | array "für das Assoziationsfeld" SGBundle \ Entity \ Album # $ images ", stattdessen" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ".

Ich habe 2 Einheiten: Album.php und Image.php mit der OneToMany-Beziehung (ein Album hat mehrere Bilder).

Meine Bilder wurden erfolgreich in meinen Ordner hochgeladen, aber ich kann sie nicht in meine Datenbank einfügen.

Hier ist der wichtigste Teil meines Codes in meinem Controller:

$images = $album->getImages(); 

     foreach ($images as $image) { 

      $fileName = md5(uniqid('img_album_', true)); 
      $fileExtension = $image->guessExtension(); 
      $nomImageComplet = $fileName . '.' . $fileExtension; 

      $image->move(
       $this->getParameter('albums_images_directory'), 
       $nomImageComplet 
      ); 

      $tinified = fromFile($this->getParameter('albums_images_directory') . '/' . $nomImageComplet); 
      $tinified->toFile($this->getParameter('albums_images_directory') . '/' . $nomImageComplet); 

      $img = new Image(); 
      $img->setExtension($fileExtension); 
      $img->setFile($fileName); 

      $em->persist($img); 
      $em->flush(); 
     } 

Meine Formtype:

/** 
* Class AlbumType 
* 
* @package SGBundle\Form 
*/ 
class AlbumType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder-> 
     add('titre', TextType::class, [ 
         'attr' => [ 
          'placeholder' => 'Titre de l\'album (140 caractères max) *', 
         ], 
        ]) 
     ->add('miniature', FileType::class, [ 
         'attr' => [ 
          'placeholder' => 'Miniature de l\'album *', 
         ], 'required' => false, 'data_class' => null, 
        ]) 
     ->add('images', FileType::class, [ 
      'attr' => [ 
       'placeholder' => 'Images de l\'album *', 
       'accept' => 'image/*', 
       'multiple' => 'multiple' 
      ], 'required' => false, 'data_class' => null, 'multiple' => true, 
     ]) 
     ->add('envoyer', SubmitType::class) 
     ->add('annuler', ResetType::class); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(
      [ 
       'data_class' => Album::class, 
      ] 
     ); 
    } 

Danke im Voraus für Ihre Hilfe

+0

uns zeigen Sie Ihre Formulartyp – kamwoz

+0

ich meinen Beitrag bearbeitet –

+0

Sie Dateien von der Form erhalten, aber Beziehung Bild. Verwenden Sie VichuploadBundle, um Dateien hochzuladen. – zalex

Antwort

0

Ihr images Attribut sollte sein etwas wie das

->add('images', CollecionType::class, [ 
'entry_type' => ImageType::class, 
'allow_add' => true, 
'allow_delete' => true 

])

Und dann Ihre Imagetype :: Klasse sollte wie sein diese

->add('image', FileType::class, [ 
'attr' => [ 
    'placeholder' => 'Images de l\'album *', 
    'accept' => 'image/*', 
    'multiple' => 'multiple 
], 'required' => false, 'data_class' => null, 'multiple' => true,]) 
Verwandte Themen