Я использую метод, описанный here, для реализации множественной загрузки файлов, но он не может найти способ заставить его работать. Я знаю, что в нем уже много вопросов, но я не мог найти подходящего ответа для моего дела.Symfony2 не привязанный к коллекции тип не работает
Обратите внимание, что я сохраняю содержимое файла в базе данных, благодаря файлу Entity с атрибутами Name, Content и Type. Однако, чтобы заставить его работать, я не сопоставляю форму с этим объектом.
Итак, мой контроллер выглядит следующим образом:
$files = [];
$form = $this->createForm(MultipleFilesType::class, []);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$files = $form->getData();
dump($files);
foreach ($files as $file)
{
//code that stores the file in the database which works fine and is not relevant to my problems I think
}
return // redirect to some page
}
return //form to the view
Мои MultipleFilesType это коллекция, которая встраивать несколько addFileType:
class MultipleFilesType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('files', CollectionType::class, array (
'entry_type' => addFileType::class,
'allow_add' => true,
'allow_delete' => true,
'label' => false,
'mapped' => false,
'data' => array(
array ('file' => null)
)
))
;
}
}
и мой addFileType это:
class AddFileType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class, array (
'label' => false
))
;
}
}
В мое представление Я могу добавлять/удалять поля благодаря некоторому JQuery, описанному в связанной документации. (Код более или менее совпадает с кодом в документе, за исключением того, что я не работаю с Entites, поэтому я не показываю его здесь).
Сначала я попытался сделать отдельные загрузки файлов, которые хорошо работали, а затем я попробовал вышеуказанный код, используя массив collectionType и $ files для извлечения данных из формы в контроллер, но у меня возникают эти проблемы :
Когда я отправляю форму, по-видимому, значения файлов после первого недействительны.
Когда я отправляю только один файл (нет ошибки проверки), дамп ($ files) в контроллере показывает мне пустой массив, несмотря ни на что.
Любая помощь будет оценена =) Не стесняйтесь спрашивать больше кода, если считаете, что это необходимо.
Спасибо!
На данный момент мои входные файлы имеют название "multiple_files [файлы] [INDEX]". Это почему мой массив $ files в моем контроллере пуст? Должен ли я просто изменить это имя с помощью javascript, чтобы добавить «_form», который отсутствует? Также я понимаю, что мой AddFileType бесполезен в его текущем состоянии, но я действительно не понимаю, как его использовать или FileType приведет к ошибкам:/ – abernard
Да, это определенно может быть причиной того, что $ data пуст, может быть другой но это кажется хорошим. AddFileType может привести к ошибкам, поскольку вы добавляете уровень вложенности в ожидаемый массив данных. С помощью AddFileType вам нужно будет ввести ввод с помощью «multiple_files_form [files] [INDEX] [file]» – Terenoth
Итак, я сделал это изменение. Когда мои имена '' multiple_files_form [files] [INDEX] "' тоже не работают. Когда я отправлю форму, контроллер больше не переходит в условие 'if ($ form-> isSubmitted() && $ form-> isValid())'. – abernard