#symfony #vichuploaderbundle
#symfony #vichuploaderbundle
Вопрос:
У меня есть эта форма, отчет с прикрепленным документом OneToMany
class ReportType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('documentDatas', CollectionType::class, array(
'entry_type' => DocumentType::class,
'allow_add' => true,
'allow_delete' => true,
'label' => false
))
->add('comment', TextType::class, array(
'label' => 'vat',
'required' => false,
))
->add('save', SubmitType::class);
}
}
и это тип документа
class DocumentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('examDocument', VichImageType::class, array(
'label' => 'examDocument',
'data_class' => null,
'attr' => array('class' => 'upload-image'),
))
->add('note', TextType::class, array(
'label' => 'notes',
'required' => false,
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundleModelDocumentData',
));
}
}
Где я использую VichImageType для загрузки. Когда проверка формы проходит нормально, все проходит правильно, файл загружается, а объекты документа добавляются в мою базу данных.
Но когда какая-то проверка нарушена (в документе или в комментарии) Я получаю эту странную ошибку:
Класс «AppBundleModelDocumentData» не может быть загружен. Если вы используете аннотации для настройки VichUploaderBundle, вы, вероятно, просто забыли добавить
@VichUploadable
поверх вашего объекта. Если вы не используете аннотации, убедитесь, что файлы конфигурации находятся в нужном месте. В обоих случаях очистка кэша также может решить проблему.
Я получаю это, когда мое действие пытается ответить с помощью представления, когда форма недопустима:
public function commentAction(Request $request) {
$reportData = new ReportData();
$form = $this->createForm(ReportType::class, $reportData);
$form->handleRequest($request);
if ($form->isSubmitted() amp;amp; $form->isValid()){
//some logic
}
return $this->render('report/form.html.twig', [
'form' => $form->createView(), //symfony evidence this row in the exception
]);
}
Ответ №1:
Я решаю добавить отображение Vich загружаемых аннотаций также в мою модель данных, вот так:
/** * @VichUploadable */ class DocumentData {
/**
* @AssertNotNull()
* @AssertFile(
* maxSize = "5M",
* mimeTypes = {"image/*", "application/pdf"}
* )
* @VichUploadableField(mapping="document_file", fileNameProperty="examDocument")
*/
public $examDocument;
/**
* @AssertLength(
* min = 2,
* max = 30,
* )
*/
public $note;
public function getExamDocument()
{
return $this->examDocument;
}
public function setExamDocument($examDocument)
{
$this->examDocument = $examDocument;
}
public static function create(Document $document)
{
$edm = new static();
$edm->examDocument = $document->getExamDocument();
$edm->note = $document->getNote();
return $edm;
} }