Многократная загрузка файлов не сохраняется - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь сохранить несколько файлов, используя VichUploader Bundle.Имя файла хорошо сохраняется в базе данных, но, к сожалению, файл не перемещен в правильную папку.

Я использую Symfony 4 & VichUploaderBundle 1.8.3.

Вот мой класс Album:

/**
 * @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, который преобразует UploadedFile в Фото.Таким образом, я могу манипулировать массивом Photo.

Этот PhotoTransformer довольно прост, я просто хочу переместить файлы из Front в Back-end

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'
            ]);
    }
}

Как видите, я следовал правилу, написанному здесь .Переменная, переданная в setImageFile, является UploadedFile.

Тем не менее, к сожалению, это не вызывает загрузку на сервер.

Знаете, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Возможно, это не сработало, потому что вы не использовали метод перемещения файлов?

$photo->move($targetDirectory, $filename);
0 голосов
/ 22 мая 2018

Проблема была в vich_uploader.yaml, выгрузка была неправильной.Поэтому я проверил в одном месте, а файлы были загружены в другом.

Теперь все работает нормально.

...