#forms #symfony #serialization
#формы #symfony #сериализация
Вопрос:
У меня есть это исключение, в странном поведении, которое я не могу понять. Я попытаюсь объяснить.
У меня есть форма, в которую я могу добавить создать отчет. Использование может загружать несколько прикрепленных 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' => 'AppBundleModelDocumentPdfData', '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’ не разрешена
появляется, когда пользователь загружает прикрепленную и сохраняет и закрывает форму. Только в этом случае другой случай работает хорошо (также загрузить прикрепленный, нажать сохранить, вернуть форму и сохранить и закрыть).
Это мой контроллер:
if ($form->isSubmitted() amp;amp; $form->isValid()) {
if ($form->getClickedButton() amp;amp; '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() amp;amp; '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 flux — это служба confimReport. Внутри этого я устанавливаю для параметра bool отчета значение true и выполняю некоторую операцию с БД, чтобы удалить некоторые разрешения пользователя на чтение и запись в этом отчете. Ничего о загруженном файле или о чем-то еще. Итак, я не могу понять, что вызывает исключение.
Примечание.:
- Если я прокомментирую службу confirmReport, все будет работать хорошо (не знаю почему);
- Я получаю исключение, но диспетчер объектов сбрасывается, поэтому в моей базе данных я сохранил операцию пользователя (также загруженный файл).
Итак, что еще может вызвать это?
Ответ №1:
Может быть, вторая очистка запутывает код? Можете ли вы попробовать это :
if ($form->isSubmitted() amp;amp; $form->isValid() amp;amp; $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()
функции?
Спасибо