Проверка нескольких файлов: «Это значение должно иметь тип string» - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать Symfony Валидатор в форме загрузки файла (проверка расширения формы), и я получаю это сообщение об ошибке:

messageTemplate: "Это значение должно иметь тип string. " из Symfony \ Component \ Validator \ ConstraintViolation

Загрузка работает без валидатора, и я не могу понять, откуда приходит это сообщение.

Вот мой FormType с базовой c проверкой, как и пример c:

    {
        $builder
            ->add('file', FileType::class, [
                'label' => 'Choisir un fichier',
                'mapped' => false,
                'multiple' => true,
                'constraints' => [
                    new File([
                        'maxSize' => '1024k',
                        'mimeTypes' => [
                            'application/pdf',
                            'application/x-pdf',
                        ],
                        'mimeTypesMessage' => 'Please upload a valid PDF document',
                    ])
                ],
            ])
        ;
    }

Если я уберу maxSize, mimeTypes и / или mimeTypesMessage аргументы, я все еще У меня такая же проблема.

Я не могу использовать аннотации для сущности (для параметра сопоставления установлено значение false).

1 Ответ

0 голосов
/ 04 мая 2020

Ошибка из-за ограничения File, ожидающего имя файла, но так как в поле есть опция multiple, фактически получает массив. Чтобы решить эту проблему, вам нужно обернуть ограничение в другое ограничение All, которое будет применять внутреннее ограничение (в данном случае File) к каждому элементу массива.

Ваш код должен выглядеть так:

    ->add('file', FileType::class, [
      'label' => 'Choisir un fichier',
      'mapped' => false,
      'multiple' => true,
      'constraints' => [
        new All([
          'constraints' => [
            new File([
              'maxSize' => '1024k',
              'mimeTypesMessage' => 'Please upload a valid PDF document',
              'mimeTypes' => [
                'application/pdf',
                'application/x-pdf'
              ]
            ]),
          ],
        ]),
      ]
    ])
...