【问题标题】:Symfony2 Upload multiple filesSymfony2 上传多个文件
【发布时间】:2015-12-03 14:02:29
【问题描述】:

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

表单创建产品类型:

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

到数据库? 提前致谢。

编辑。 我的 Document 实体看起来像 this Document.php

【问题讨论】:

    标签: php symfony doctrine


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-10
      • 2012-05-13
      • 2015-05-21
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多