Symfony2 простое редактирование загрузки файлов без сущности
Пожалуйста, помогите мне здесь, потому что я не могу поверить своим глазам.
Я отказываюсь использовать какой-либо сторонний плагин для загрузки файлов и отказываюсь создавать отдельную сущность для файла / документа. Я просто хочу простую загрузку файлов, которую я сделал бы в Zend / Laravel и так далее.
У меня есть таблица счетов с последним именем «вложение», я хочу сохранить здесь его очищенное имя (например, 123421_filename.jpg), форма добавления и загрузка прошли хорошо.
код здесь:
//AddAction
$file=$form['attachment']->getData();
$fileName=$file->getClientOriginalName();
$sanitizedFilename=rand(1, 99999).'_'.$fileName;
$dir='files/'.$userId.'/';
$file->move($dir, $sanitizedFilename);
...
$invoice->setAttachment($sanitizedFilename);
$em = $this->getDoctrine()->getManager();
$em->persist($invoice);
Первая проблема, которую я имею и не знаю, как решить, это использовать форму редактирования .. У меня есть formbuilder
$builder->add('attachment', 'file',array('data_class'=>null))
Поскольку у меня нет «Объекта» для моего файла и потому что в моей таблице счетов я сохраняю имя в виде строки, я получаю здесь ошибку, и мне нужно принудительно установить data_class => null .., что плохо, потому что если Я редактирую Инвойс во внешнем интерфейсе для поля загрузки. Я получаю NULL вместо имени файла текущего файла, связанного с инвойсом.
С:
$builder->add('attachment', 'text')
Я не получаю файл ввода просто глупое текстовое поле, но в это время - с именем в нем - ... так, как я могу решить это? Файл Виджет ввода и имя файла в нем без объекта Document ?!
И второй вопрос (я просто собираюсь выбросить все свои приложения, разработанные до сих пор, и перейти на laravel, потому что у меня было много «подобных проблем» .. делать простые вещи в Symfony почти всегда сложнее, чем в другие фреймворки ... или, может быть, я виноват в том, что я не хочу следовать указаниям и создавать сущность документа ?! Что если я хочу гибкости и хочу управлять своей базой данных другим способом, который не вписывается во все эти рекомендации? )
Поэтому я нахожусь в действии формы редактирования, я загружаю новый файл (не забывайте, что у меня установлен файл $ builder-> add ('attachment', file ', array (' data_class '=> null))
Я не могу получить имя строки вложения из текущего счета, который я редактирую? !
public function editAction($id)
....
$invoice = $em->getRepository('AppBundle:Invoice')->find($id);
..
if ($form->isValid()) {
$oldFileName=$invoice->getAttachment(); //this is null
$oldFileName=$invoice->getId(); //this returns the invoice id
$oldFileName=$invoice->getValue(); //returns invoice value
echo 'old: '.$oldFileName.'<br/>';
exit();
}
Итак, кто-то, пожалуйста, скажите мне, почему я не могу получить доступ к своей собственности на счета? Какая строка?
Я попытался создать новый экземпляр, хотя, как-то, если я создаю форму с объектом $ invoice, он как-то связывает его с вложением из формы редактирования.
if ($form->isValid()) {
$sameInvoice= $em->getRepository('AppBundle:Invoice')->find(20); //hardcoded ID
$oldFileName=$sameInvoice->getAttachment(); //still null
$oldFileName=$sameInvoice->getId(); //returns 20
echo 'old: '.$oldFileName.'<br/>';
exit();
Единственное, что я хотел, это иметь строку имени файла в моей таблице счетов и проверить, существует ли файл в пути с этим именем файла, и если он существует, то удалите его и загрузите новое и т. Д. Почему это происходит? должно быть так сложно ??
Почему я должен создать сущность? Почему я должен изменить свою структуру базы данных (здесь дело не в этом ... но что, если клиент не хочет, чтобы база данных была изменена ... поэтому я не могу вставить эту таблицу "Document") .. Почему можно ' Когда построитель форм показывает данные из invoice-> attachment, я понимаю, что ему нужны данные файла, и он не может принять строку, но почему нет руководства по этим простым задачам ?!