Файл, загружаемый как часть формы, не является частью запроса в Symfony 4 - PullRequest
0 голосов
/ 25 февраля 2020

Форма, которую я создал, включает в себя поле загрузки для загрузки файла. Этот файл может быть любого формата. Сама форма создается внутри FormType, и контроллер успешно обрабатывает отправку формы. Однако каждый раз, когда я отправляю форму этому контроллеру и выполняю print_r или var_dump(), поле загрузки не включается как часть параметров запроса POST. Когда я использую $file = $request->files->get('estimateUpload'); и var_dump(), он будет только когда-либо возвращать NULL.

Вот форма, которую я использую:

<?php

namespace App\Form;

use App\Entity\IhcVehicleDamageMatrix;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\File;

class IhcVehicleDamageEntryType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id')
            ->add('incidentId')
            ->add('vehicleDamageId')
            ->add('damageType')
            ->add('description')
            ->add('wheelTyreDamage')
            ->add('tyreAge')
            ->add('tyreDotCode')
            ->add('treadDepth')
            ->add('renumerationCost')
            ->add('itemAge')
            ->add('created')
            ->add('modified')
            ->add('estimateUpload', FileType::class, [
                'required' => false
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => IhcVehicleDamageMatrix::class,
        ]);
    }
}

В файле представления это как я использую поле загрузки:

{{ form_start(damageForm, {'action': path('forms_ihc_damage_details_submitform'), 'method': 'POST', 'attr': {'id': 'ihcFormDamageDetails', 'enctype': 'multipart/form-data'}}) }}
{{ form_row(damageForm._token) }}
                    <tr>
                        <th>Upload Estimate</th>
                        <td>
                            {{ form_widget(damageForm.estimateUpload) }}
                            <small>{{ form_help(damageForm.estimateUpload) }}</small>
                            <div class="form-error">
                                {{ form_errors(damageForm.estimateUpload) }}
                            </div>
                        </td>
                    </tr>
{{ form_errors(damageForm) }}
{{ form_end(damageForm, {'render_rest': false}) }}

А в контроллере, как я получаю данные формы:

    public function vehicleDamageForm(Request $request)
    {
        // Get Form Details
        $formdet = $request->get('ihc_vehicle_damage_entry');

        $em = $this->getDoctrine()->getManager();

        $file = $request->files->get('estimateUpload');
        var_dump($file);
}

1 Ответ

0 голосов
/ 25 февраля 2020

Лучший способ - получить estimateUpload напрямую от IhcVehicleDamageMatrix. Попробуйте что-то вроде этого внутри контроллера:

$ihcVehicleDamageMatrix = new IhcVehicleDamageMatrix();

$form = $this->createForm(IhcVehicleDamageEntryType::class, $ihcVehicleDamageMatrix);

if ($form->isSubmitted() && $form->isValid()) {
    $file = $ihcVehicleDamageMatrix->estimateUpload();
    dump($file);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...