多文件验证:"This value should be of type string"

Multiple file validation: "This value should be of type string"

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

messageTemplate: "This value should be of type string." from 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 and/or mimeTypesMessage 参数,我仍然有同样的问题。

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

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