Php 多个上载文件未保存

Php 多个上载文件未保存,php,symfony,symfony4,vichuploaderbundle,Php,Symfony,Symfony4,Vichuploaderbundle,我尝试使用VichUploader包保存多个文件。 文件名已很好地保存在数据库中,但遗憾的是,该文件未移动到正确的文件夹中 我使用Symfony 4和VichUploaderBundle 1.8.3 这是我的专辑课: /** * @ORM\Entity(repositoryClass="App\Repository\AlbumRepository") * @ORM\HasLifecycleCallbacks */ class Album { /** * @ORM\Id()

我尝试使用VichUploader包保存多个文件。 文件名已很好地保存在数据库中,但遗憾的是,该文件未移动到正确的文件夹中

我使用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;
...
}
好的,为了使用这个包,我编写了一个DataTransformer,将上传的文件转换成照片。这样,我可以操纵一组照片

这个光电转换器非常简单,我只想把文件从前端移到后端

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'
            ]);
    }
}
正如你所看到的,我遵循了我写的规则。 传递给“setImageFile”的var是一个上载文件

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


你知道我遗漏了什么吗?

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


现在一切正常。

它可能不起作用,因为您没有使用文件移动方法

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

感谢您的帮助,事实上,这是因为我没有为VichUploader创建正确的配置文件。文件已上载,但未在正确的目标文件夹中:)