2015-12-03 6 views
1

Привет всем, я все еще изучаю symfony2, и я хочу обработать загрузку нескольких файлов на сервер. Я пытаюсь выполнить 2 объекта по одной форме. У меня есть документ, сущность продукта иSymfony2 Загрузите несколько файлов

форма CreateProductType:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name', 'text') // product name, quantity, description, etc 
     ->add('file','file',array(
      'required' => false, 
      'mapped' => false, 
      'data_class' => 'AppBundle\Entity\Document', 
      'attr' => array(
       'accept' => 'image/*', 
       'multiple' => 'multiple', 
      ) 
     )); 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class'  => 'AppBundle\Entity\Product' 
    )); 
} 

, что я должен делать в контроллере, чтобы поместить файлы в папку закачек, вставить новый продукт

name,description,quantity,price, etc 

и документов (фотографии)

id, path, product_id 

в базу данных? Спасибо заранее.

EDIT. мое лицо Документ выглядит this Document.php

ответ

1

Если используется форма множественного массива вы должны использовать коллекцию в строитель:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('files', 'collection', array(
      'type' => 'file', 
      'options' => array(
       'required' => false, 
       'mapped' => false, 
       'attr' => array(
        'accept' => 'image/*', 
        'multiple' => 'multiple', 
       ) 
      ) 
     )) 
     ->add('product', new ProductType()) 
     ->add('save', 'submit', array(
      'label' => 'Submit', 
      'attr' => array('class' => 'btn btn-default') 
     )); 
} 

, а затем использовать коллекцию массива в сущности:

/** 
* @Assert\File(maxSize="6000000") 
*/ 
public $files; 

public function __construct() 
{ 
    $this->files = new ArrayCollection(); 
} 

/** 
* Add file 
* 
* @param UploadedFile $file 
* @return UploadedFile 
*/ 
public function addFile(UploadedFile $file) 
{ 
    $this->files[] = $file; 

    return $this; 
} 

/** 
* Remove file 
* 
* @param UploadedFile $file 
*/ 
public function removeFile(UploadedFile $file) 
{ 
    $this->files->removeElement($file); 
} 

Поскольку необходимость многократного загрузки имеет имя массива name="files[]" для хранения нескольких файлов.

SEE:Multiple file upload with Symfony2 и Symfony 2 Form collection field with type file

+0

Спасибо так много. – betty39johnson

Смежные вопросы