Symfony2上传多个文件

时间:2015-12-03 14:02:29

标签: php symfony doctrine

大家好我还在学习symfony2,我想处理将多个文件上传到服务器。我尝试通过一个表单执行2个实体。 我有文档,产品实体和

表单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。 我的Document实体看起来像this Document.php

1 个答案:

答案 0 :(得分: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[]"来存储多个文件。

参见: Multiple file upload with Symfony2Symfony 2 Form collection field with type file