Symfony2 не найдена загрузка нескольких файлов в цепочке сконфигурированных пространств имен исключение

#php #symfony #file-upload #doctrine-orm

#php #symfony #загрузка файла #doctrine-orm

Вопрос:

Итак, я работал над тем, чтобы заставить мой веб-сайт загружать несколько файлов одновременно, и я довольно близко подобрался (я думаю), но я получаю следующую ошибку «Класс ‘SymfonyComponent HttpFoundationFileUploadedFile’ не найден в цепочке сконфигурированных пространств имен». Я думаю, это потому, что я загружаю файл как

 $data = $form->getData();
$files = $data['file'];

foreach($files as $file)
{
    $photo = new Photo();
    $photo->setFile($file);
    $em->persist($file);
}
  

вместо подключения $photo к createFormBuilder, если это имеет какой-либо смысл. Я не уверен, что здесь делать, так как я не хочу терять auto_mapping из doctrine. Есть ли здесь другой обходной путь, чтобы сделать doctrine map UploadedFile? Вот мой полный код

Контроллер

Сущность

Объект Photo YML

Ответ №1:

Вы не можете этого сделать. Doctrine пытается сохранить UploadedFile класс, и это вообще не класс сущности.

Возможные обходные пути:

  • Сохраните имя файла
  • Сохраните содержимое файла (данные большого двоичного объекта)

Как правило, более простой способ — сохранить только имя файла, но вам также необходимо переместить файл, поскольку по умолчанию файл загружается в /tmp . Невозможность переместить его приведет к полной потере файла.

UploadedFile поставляется с полезным методом, move который вы могли бы использовать для перемещения файлов.

Другое решение (меньше кода, но намного сложнее):

Около недели назад я выпустил свой собственный пакет, который обрабатывает загрузку файлов. Вы можете найти это здесь: https://github.com/jperovic/exploring-fileutility

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

Отказ от ответственности: в мои намерения не входит отвлекать вас вопросом с продвижением пакета. Просто скажите слово, и я удалю его из ответа.

Комментарии:

1. Ах, извините, я забыл поместить файл конфигурации doctrine для моей сущности. Я все это сделал. Я получил предварительную загрузку с помощью prePersist-хука и загрузку с помощью postPersist-хука. Я выбираю первый метод. Загрузка работает, когда я привязываю свой объект Photo к конструктору форм, эта проблема возникает, когда я пытаюсь сохранить свой объект вручную, как указано выше. Я бы использовал пакет, но сначала хочу понять, как сделать это автономно

2. Спасибо за вашу помощь. Я все равно ставлю вам оценку, потому что ваш пост был очень информативным, но когда дошло до дела, это была глупая опечатка

Ответ №2:

Видимо, я просто идиот. Потратил часы, пытаясь разобраться в этом, только чтобы выяснить, что я делал

 $em->persist($file);
  

вместо

 $em->persist($photo);
  

Мой плохой