Я хочу использовать filepond, чтобы сделать мои формы ввода более изящными, но он заменяет мой файловый виджет на серию элементов, у которых нет атрибута name, поэтому на заднем конце ничего не отображается.мой класс форм Symfony:
class UserProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstName', TextType::class)
->add('lastName', TextType::class)
etc...
// This is the widget I am concerned about for this question
->add('idFile', FileType::class, [
'label' => 'File or Files',
'required' => false,
'mapped' => false,
'multiple' => false
])
etc...
->add('save', SubmitType::class, [
'attr' => ['class' => 'save'],
]);
}
}
Вот как это выглядит, когда я создаю виджет файлов в ветке:
<div class="col-12">
<label for="file-upload" class="mb-2">Photo I.D.</label>
<!-- so right here where I add the filepond class -->
{{ form_widget(form.idFile, { 'id': 'file-upload', 'attr': {'class': 'form-control filepond'} } ) }}
</div>
Вот библиотеки использованных файлов, которые я включил внизумоего файла ветки:
<!-- Load FilePond library -->
<script src="https://unpkg.com/filepond/dist/filepond.min.js"></script>
<!-- <script src="https://unpkg.com/jquery-filepond/filepond.jquery.js">
</script> -->
<script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js"></script>
<link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
<link href="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css" rel="stylesheet">
Так что, когда файл ветки загружается, filepond вступает во владение и преобразует мой виджет в серию элементов со всеми видами свойств для них.
Это нормально,Я понимаю, что filepond делает это, чтобы придать форму вашей форме.Но проблема в том, что на заднем плане ничего не появляется.
Еще одна вещь, которую нужно добавить - ни один из элементов, которые создает filepond, не имеет атрибута «name», поэтому я не понимаю, почему.на заднем плане мой idFile отсутствует.
Просто чтобы подтвердить, что когда я убираю класс filepond, мой idFile снова отображается в файлах suplerglobal на серверном конце.
Вот элемент ввода, сгенерированный веточкой:
<div class="col-12">
<label for="file-upload" class="mb-2">Photo I.D.</label>
<input type="file" id="file-upload" name="user_profile[idFile]" class="form-control filepond" />
</div>
Если я проверяю элемент, среди сгенерированных файлом div'ов есть < input type="hidden" name="user_profile[idFile]" value="">
Вот контроллеркод на заднем конце:
public function saveProfileCompleteAction(Request $request)
{
$user = $this->getUser();
$form = $this->createForm(UserProfileType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$idFile = $form['idFile']->getData();
Если я сделаю dump($idFile);
, то просто отобразится ноль, и я проверил и убедился, что выбрал файл для загрузки.
Как я могу использовать библиотеку filepond и заставить мой виджет ввода файла отображаться на сервере?