在Symfony 2.8中上传多张图片

3

我正在使用Symfony 2.8进行开发,我已经创建了一个表单用于上传1张照片,并且它正常工作。但现在我遇到的问题是,我希望这个表单可以允许我们上传多张照片。 以下是我尝试过的,但目前还没有结果!

图片实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\File;

/**
 * Image
 *
 * @ORM\Table(name="image")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ImageRepository")
 */
class Image
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="path", type="string", length=255)
     */
    private $path;

    /**
     * @ORM\Column(type="string")
     *
     * @Assert\NotBlank(message="Please, upload the product name as a image file.")
     * @Assert\File(mimeTypes={ "image/jpg", "image/jpeg" ,"image/png"})
     */
    private $name;


    /**
     * @var \DateTime
     *
     * @ORM\Column(name="create_time", type="datetime", nullable=false)
     */
    private $createTime;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="change_time", type="datetime", nullable=true)
     */
    private $changeTime;

    /**
     * @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", cascade={"persist"})
     * @ORM\JoinColumn(referencedColumnName="id", nullable=false)
     */
    private $createUser;

    /**
     * @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", cascade={"persist"})
     * @ORM\JoinColumn(referencedColumnName="id", nullable=true)
     */
    private $changeUser;


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


    /**
     * Set path
     *
     * @param string $path
     *
     * @return Image
     */
    public function setPath($path)
    {
        $this->path = $path;

        return $this;
    }

    /**
     * Get path
     *
     * @return string
     */
    public function getPath()
    {
        return $this->path;
    }


    /**
     * @return mixed
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @param mixed $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * @return \DateTime
     */
    public function getCreateTime()
    {
        return $this->createTime;
    }

    /**
     * @param \DateTime $createTime
     */
    public function setCreateTime($createTime)
    {
        $this->createTime = $createTime;
    }

    /**
     * @return \DateTime
     */
    public function getChangeTime()
    {
        return $this->changeTime;
    }

    /**
     * @param \DateTime $changeTime
     */
    public function setChangeTime($changeTime)
    {
        $this->changeTime = $changeTime;
    }

    /**
     * @return mixed
     */
    public function getChangeUser()
    {
        return $this->changeUser;
    }

    /**
     * @param mixed $changeUser
     */
    public function setChangeUser($changeUser)
    {
        $this->changeUser = $changeUser;
    }

    /**
     * @return mixed
     */
    public function getCreateUser()
    {
        return $this->createUser;
    }

    /**
     * @param mixed $createUser
     */
    public function setCreateUser($createUser)
    {
        $this->createUser = $createUser;
    }



}

图像类型:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\SubmitButton;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ImageType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', FileType::class, array("label" => "Files",
                "required" => FALSE,
                "attr" => array(
                "multiple" => "multiple")))
            ->add('path')
            ->add('Upload', SubmitType::class)
        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Image'
        ));
    }
}

ImageController :

public function UploadAction(Request $request)
{

    $product = new Image();
    $form = $this->createForm(ImageType::class, $product);
    $form->handleRequest($request);


    if ($form->isSubmitted() && $form->isValid()) {

        /** @var UploadedFile $file */
        $file = $product->getName();

        $fileName = md5(uniqid()).'.'.$file->guessExtension();


        $file->move(
            '/var/www/html/master_c/web/images/',
            $fileName
        );

        $product->setName($fileName);
        $em = $this->getDoctrine()->getManager();
        $em->persist($product);
        $em->flush();

    }

    return $this->render('AppBundle:Image:upload.html.twig', array(
        'form' => $form->createView(),
    ));
}

upload.html.twig :

{{ form_start(form) }}
    {# ... #}

    {{ form_row(form.name,  { 'attr': {'multiple': 'multiple' }}) }}
{{ form_end(form) }}

1
Symfony2中的多文件上传: https://dev59.com/1Gw15IYBdhLWcg3wQpXS 希望这可以帮到您。 - Tarik FAMIL
已经看过了,但不幸的是它并没有帮助到我! - Shosiria
2个回答

0

我尝试使用CollectionType,但是出现了这个错误:期望的参数类型为“字符串”,但给定了“数组” - Shosiria

0

你需要将这个代码中的 "multiple" => "multiple" 改为

'multiple' => true 

你应该有类似这样的代码:

->add('name', FileType::class, array("label" => "文件", 'required' => false, 'multiple' => true))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接