php - 使用 Symfony 表单上传多个文件

标签 php mysql doctrine-orm twig symfony

已更新 在我的 Symfony 项目中,我可以上传单张图片。现在我正在尝试上传多张图片。

class ImageFile extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('images', FileType::class, array(
                'attr' => array(
                    'accept' => 'image/*',
                    'multiple' => 'multiple'
                )
            ))
            ->add('save',SubmitType::class,array('label'=>'Insert Image','attr'=>array('class'=>'btn btn-primary','style'=>'margin-bottom:15px')))
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => images::class
        ));
    }
}

在我的 Images 实体中,我保留了一组像这样的 SatellieImage 对象。

class images
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @var satelliteImage[]
     * @ORM\Column(name="images", type="string")
     *
     */
    private $images;

    /**
     * Set images
     *
     * @param string $images
     *
     * @return satelliteImage[]
     */
    public function setImages($images)
    {
        $this->images = $images;

        return $this->images;
    }

    /**
     * Get images
     *
     * @return satelliteImage[]
     */
    public function getImages()
    {
        return $this->images;
    }

    public function addImage($image)
    {
        $this->images[] = $image;

        return $this;
    }
}

在我的 Controller 中,我将 satelliteImage[] 存储为 $files 并运行一个 foreach 循环来上传()每个文件(上传()函数非常适合单个文件)

public function uploadImages(Request $request)
    {
        $satelliteImage=new satelliteImage;
        $images=new images();

        $form = $this->createForm(ImageFile::class, $images);
        $form->handleRequest($request);

        $files=$images->getImages();

        foreach ($files as $file){
            $em=$this->getDoctrine()->getManager();

            $file->upload();

            $em->persist($satelliteImage);
            $em->flush();
        }
        $this->addFlash(
            'notice',
            'Images inserted successfully'
        );

        return $this->redirectToRoute('satellite_images');
    }

问题:我收到一条错误消息“警告:为 foreach() 提供的参数无效”我该如何解决?

最佳答案

我认为您在这里所要做的就是将“multiple”属性添加到您的 ImageFile 类;

参见 Symfony documentation .

use Symfony\Component\Form\Extension\Core\Type\FileType;

class ImageFile extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('images', FileType::class, [
                'multiple' => true,
                'attr'     => [
                    'accept' => 'image/*',
                    'multiple' => 'multiple'
                ]
            ])
        ;
    }
}

此外,将“图像”属性更改为“图像”属性:

/**
 * Set images
 *
 * @param string $images
 *
 * @return satelliteImage[]
 */
public function setImages($images)
{
    $this->images = $images;

    return $this;
}

/**
 * Get images
 *
 * @return string
 */
public function getImages()
{
    return $this->image;
}

public function addImage($image)
{
    $this->images[] = $image;

    return $this;
}

完成排序后,您可以修改 upload 方法来处理来自 FormType 的多个文件。

关于php - 使用 Symfony 表单上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551183/

相关文章:

mysql - 合并找到的结果和未找到的结果

php - Codeigniter 查询更新所有行而不是 1

php - 比较日期 ("Y-m-d h:i:s");

php - 使用事件记录根据其他表中包含与外键相同的 id 的每个 id 计算行数

php fgetcsv 和整数转换(UTF8 x UCS-2 Little Endian)

doctrine-orm - 在 Doctrine 结果集合中进行过滤的方法?

inheritance - 教义继承替换

php - C AutoComplete 如何设置回调功能?伊尔

mysql - 创建 MySql 表时出错

mysql - 预期查询生成器 SingleValuedAssociationField