多次上传文件未保存

时间:2018-05-22 11:59:22

标签: php symfony symfony4 vichuploaderbundle

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

我使用Symfony 4& VichUploaderBundle 1.8.3。

这是我的专辑类:

/**
 * @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。这样,我可以操作一个Photo数组。

这个PhotoTransformer非常简单,我只是想把文件从前端移到后端<​​/ p>

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;
    }
}

这是我的AlbumType:

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。

然而,不幸的是,这并没有触发服务器上传。

你知道我错过了吗?

2 个答案:

答案 0 :(得分:0)

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

现在一切正常。

答案 1 :(得分:0)

它可能没有用,因为你没有使用文件移动方法?

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