#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? Вот мой полный код
Ответ №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);
Мой плохой