При многократной загрузке файлы не сохраняются

Я пытаюсь сохранить несколько файлов с помощью 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. Таким образом, я могу управлять массивом фотографий.

Этот 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.

Однако, к сожалению, это не запускает загрузку на сервер.

Вы знаете, что мне не хватает?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

Спасибо за вашу помощь, потому что я не создал правильный файл конфигурации для VichUploader. Файл был хорошо загружен, но не в нужной папке назначения :)

Alexandre 24.05.2018 16:20

Другие вопросы по теме