温馨提示:本文翻译自stackoverflow.com,查看原文请点击:symfony - Multiple file validation: "This value should be of type string"
file-upload symfony symfony-forms symfony4 validation

symfony - 多文件验证:“此值应为字符串类型”

发布于 2020-08-16 14:09:14

我正在尝试在文件上传表单(表单扩展名的验证)上使用Symfony Validator,并且收到以下错误消息:

messageTemplate:“此值应为字符串类型。” 来自Symfony \ Component \ Validator \ ConstraintViolation

没有验证程序,上传效果很好,我无法弄清楚此消息的来源。

这是我的FormType,具有作为文档示例的基本验证:

    {
        $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',
                    ])
                ],
            ])
        ;
    }

如果我删除maxSizemimeTypes和/或mimeTypesMessage论据,我仍然有同样的问题。

我无法在实体上使用注释(映射选项设置为false)。

查看更多

提问者
Cris
被浏览
1
msg 2020-05-04 19:05

该错误是由于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'
              ]
            ]),
          ],
        ]),
      ]
    ])