我正在尝试在文件上传表单(表单扩展名的验证)上使用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',
])
],
])
;
}
如果我删除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'
]
]),
],
]),
]
])