多次上传文件不保存

Multiple upload the files are not saved

我尝试使用 VichUploader Bundle 保存多个文件。 文件名保存在数据库中,但不幸的是,文件没有移动到正确的文件夹中。

我使用 Symfony 4 和 VichUploaderBundle 1.8.3。

这是我的相册 class :

/**
 * @ORM\Entity(repositoryClass="App\Repository\AlbumRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Album
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
     private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Photo", mappedBy="album", orphanRemoval=true, cascade={"persist", "remove"})
     */
    private $photos;

    /**
     * @ORM\Column(type="datetime")
     */
    private $createdAt;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

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

...
}

现在,照片

/**
 * @ORM\Entity(repositoryClass="App\Repository\PhotoRepository")
 * @Vich\Uploadable()
 * @ORM\HasLifecycleCallbacks
 */
class Photo
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @Vich\UploadableField(mapping="album_images", fileNameProperty="imageName")
     * @var File
     */
    private $imageFile;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Album", inversedBy="photos")
     * @ORM\JoinColumn(nullable=false)
     */
    private $album;

    /**
     * @ORM\Column(type="datetime")
     * @var \DateTime
     */
    private $updatedAt;
...
}

好的,所以,为了使用 Bundle,我编写了一个 DataTransformer 将 UploadedFile 转换为 Photo。这样,我就可以操作一组照片了。

这个PhotoTransformer很简单,我只是想将文件从前端移动到后端

class PhotoTransformer implements DataTransformerInterface
{
    public function transform($value)
    {
        //We won't reverse the operation. It goes from front-end to back-end.
        return [];
    }

    public function reverseTransform($value)
    {
        $photos = [];
        foreach ($value as $file) {
            $photo = new Photo();
            $photo->setImageFile($file);
            $photos[] = $photo;
        }
        return $photos;
    }
}

这是我的专辑类型:

class AlbumType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        return $builder
            ->add('title', TextType::class)
            ->add('description', TextareaType::class)
            ->add($builder->create(
                    'photos', FileType::class, [
                        'required' => false,
                        'multiple' => true
                    ]
                )->addModelTransformer(new PhotoTransformer())
            )
            ->add('button', SubmitType::class, [
                'label' => 'Create'
            ]);
    }
}

如您所见,我遵循了 here 的规则。 传递给 "setImageFile" 的 var 是一个 UploadedFile。

然而,不幸的是,这不会触发服务器上载。

你知道我错过了什么吗?

问题出在 vich_uploader.yaml,upload_destination 不正确。 所以我在一个地方检查,文件在另一个地方上传。

现在一切正常。

可能是因为你没有使用文件移动方法,所以没有成功?

$photo->move($targetDirectory, $filename);