Проблема с Vichuploader и валидацией Symfony

#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;
    } }
  

Спасибо Гараку за помощь!