我试图在一个文件上传表单上使用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
, mimeTypes
或 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'
]
]),
],
]),
]
])