Symfony3多个上传文件

时间:2016-05-03 09:24:14

标签: php upload symfony-forms symfony

我实现了一个用于在目录中上传文件的表单。我会使用多个插入而没有很多关系。

这是我的实体文件:     

 namespace AppBundle\Entity;

 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* @ORM\Entity
*/
class Document
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
public $id;

/**
 * @Assert\File(maxSize="6000000")
 */
private $file;

/**
 * @ORM\Column(type="string", length=255)
 * @Assert\NotBlank
 */
public $name;

/**
 * @ORM\Column(type="string", length=255, nullable=true)
 */
public $path;

public function getAbsolutePath()
{
    return null === $this->path
        ? null
        : $this->getUploadRootDir().'/'.$this->path;
}

public function getWebPath()
{
    return null === $this->path
        ? null
        : $this->getUploadDir().'/'.$this->path;
}

protected function getUploadRootDir()
{
    // the absolute directory path where uploaded
    // documents should be saved
    return __DIR__.'/../../../web/'.$this->getUploadDir();
}

protected function getUploadDir()
{
    // get rid of the __DIR__ so it doesn't screw up
    // when displaying uploaded doc/image in the view.
    return 'uploads/documents';
}

 /**
 * Sets file.
 *
 * @param UploadedFile $file
 */
public function setFile(UploadedFile $file = null)
{
    $this->file = $file;
}

/**
 * Get file.
 *
 * @return UploadedFile
 */
public function getFile()
{
    return $this->file;
}

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

/**
 * Set name
 *
 * @param string $name
 *
 * @return Document
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

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

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

    return $this;
}

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

public function upload() {
    // the file property can be empty if the field is not required
    if (null === $this->getFile()) {
        return;
    }

    // use the original file name here but you should
    // sanitize it at least to avoid any security issues
    // move takes the target directory and then the
    // target filename to move to
    $this->getFile()->move(
            $this->getUploadRootDir(), $this->getFile()->getClientOriginalName()
    );

    // set the path property to the filename where you've saved the file
    $this->path = $this->getUploadRootDir()."/".$this->getFile()->getClientOriginalName();
    // clean up the file property as you won't need it anymore
    $this->file = null;
}
}

这是我的控制者:

public function uploadAction(Request $request) {
    $document = new Document();
    $form = $this->createFormBuilder($document)
            ->add('name')
            ->add('file',FileType::class,array(
                "attr" => array(
                    "accept" => "image/*",
                    "multiple" => "multiple",
                )
            ))
            ->add('save', SubmitType::class, array(
                'label' => 'Salva',
                'attr' => array('class' => 'btn btn-primary')
            ))
            ->getForm();
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $document->upload();
        $em->persist($document);
        $em->flush();

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

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

如何编辑我的代码以插入更多图像?只要有一个表单的转发器,它只能进行多次插入就足够了吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试嵌入一系列表单,如此处所述http://symfony.com/doc/current/cookbook/form/form_collections.html

您还可以使用特定的捆绑https://github.com/glavweb/GlavwebUploaderBundle来完成任务。