多个文件验证。"该值应是字符串类型"

问题描述 投票:0回答:1

我试图在一个文件上传表单上使用Symfony Validator(表单扩展名的验证),但我得到了这个错误信息。

messageTemplate: "这个值应该是字符串类型的。" 来自Symfony/Component/Validator/ConstraintViolation

在没有验证器的情况下,上传工作良好,我不知道这条消息是怎么来的。

这是我的FormType,有一个基本的验证作为doc的例子。

    {
        $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, mimeTypesmimeTypesMessage 参数,但我还是有同样的问题。

我不能在实体上使用注解(映射选项被设置为 false).

symfony validation file-upload symfony4 symfony-forms
1个回答
1
投票

这个错误是由于 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'
              ]
            ]),
          ],
        ]),
      ]
    ])
© www.soinside.com 2019 - 2024. All rights reserved.