Странное исключение - сериализация «Symfony \ Component \ HttpFoundation \ File \ File» не допускается - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть это исключение, странное поведение, которое я не могу понять.Я постараюсь объяснить.

У меня есть форма, куда я могу добавить создание отчета.Использование может загрузить несколько вложенных PDF и текстовый комментарий.Форма имеет 2 кнопки отправки, 'save' и 'saveAndClose'.

class ReportType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('documentDatas', CollectionType::class, array(
                'entry_type' => DocumentType::class,
                'entry_options' => ['data_class' => 'AppBundle\Model\DocumentPdfData', 'add_class' => 'upload-pdf'],
                'allow_add' => true,
                'allow_delete' => true,
                'label' => false
            ))
            ->add('comment', CKEditorType::class, array(
                'config' => array('toolbar' => 'my_toolbar'),
                'label' => false,
                'required' => false,
                'input_sync' => true
            ))
            ->add('save', SubmitType::class, array('attr' => array('class' => 'btn btn-success mr-2')))
            ->add('saveAndClose', SubmitType::class, array('label' => 'saveAndClose', 'attr' => array('class' => 'btn btn-success float-right')))
        ;
    }
}

При сохранении сохраняется только форма, saveAndClose, очевидно, закрывает отчет, поэтому пользователь больше не может его изменять.

Исключение

Сериализация 'Symfony \ Component \ HttpFoundation \ File \ File' не разрешена

появляется, когда пользователь загружает прикрепленный файл и сохраняетAndClose формы,Только в этом случае хорошо работает другой случай (также загрузите прикрепленный файл, нажмите «Сохранить», верните форму и сохраните AndClose).

Это мой контроллер:

 if ($form->isSubmitted() && $form->isValid()) {
            if ($form->getClickedButton() && 'saveAndClose' === $form->getClickedButton()->getName()) {

                    $this->get(ConfirmReport::class)->confirm($report, $user);
                    $em->flush();

                    $report->modify($reportData, $user);

                    $em->persist($report->getReportParameters());
                    $em->persist($report);

                    $em->flush();

                    $this->addFlash('success', $this->get('translator')->trans('ReportConfirmed'));
                    return $this->redirectToRoute('practitioner_visit_detail_to_do');

            }

            if ($form->getClickedButton() && 'save' === $form->getClickedButton()->getName()) {
                $report->modify($ReportData, $user);
                $em->persist($report->getReportParameters());
                $em->persist($report);
                $em->flush();

                $this->addFlash('success', $this->get('translator')->trans('ReportSaved'));
                return $this->redirectToRoute('practitioner_visit_detail_to_do');
            }
        }

Итак, единственное отличиеМежду 2 потоком - сервис confimReport.Внутри этого я установил для параметра bool report значение true и произвел некоторую операцию с БД, чтобы удалить некоторые права на чтение и запись для пользователя в этом отчете.Ничего о загруженном файле или что-то еще.Итак, я не могу понять, в чем причина исключения.

NB:

  • Если я прокомментирую, все службы хорошо подтверждают (не знаю почему);
  • Я получаю исключение, но менеджер сущностей сбрасывается, поэтомув моей базе данных я сохранил действия пользователя (также загруженный файл).

Так что же еще может вызвать это?

1 Ответ

0 голосов
/ 14 апреля 2019

Может, вторая промывка портится с кодом? Можете ли вы попробовать это:

if ($form->isSubmitted() && $form->isValid() && $form->getClickedButton()) {
    if ('saveAndClose' === $form->getClickedButton()->getName()) {
        $this->get(ConfirmReport::class)->confirm($report, $user);
        $msg='ReportConfirmed';
    }

    if ('save' === $form->getClickedButton()->getName()) {
        $msg = 'ReportSaved';
    }

    $report->modify($ReportData, $user);
    $em->persist($report->getReportParameters());
    $em->persist($report);
    $em->flush();

    $this->addFlash('success', $this->get('translator')->trans($msg));
    return $this->redirectToRoute('practitioner_visit_detail_to_do');
}

Вы также можете показать содержимое функции confirm()?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...