如何在Symfony Forms中验证上传文件的名称



这是我在FormUploaderType 的生成器中输入的"terms">

->add('terms', FileType::class, [
'constraints'   => [
'pattern'   => '/([a-z]+-)+[20]d{7}.pdf/',
'message'   => 'Change the name of the file',
'mimeTypes' => [
"application/pdf",
"application/x-pdf",
],
])

我想确定的是,文件的名称与我想要的完全一样(例如:"something-else-in-here-20200430.pdf"(,但它不起作用-它向我显示了一条错误消息。。。我该如何处理?我在symfony文档中看到了Annotation方法,在类实体中也看到了loadValidatorMetadata方法,但它们似乎都不适合我上传文件。。。

您需要实例化约束。mimeTypes密钥对应于File约束,而pattern用于Regex

但是,由于termsUploadedFile,其__toString()方法将返回临时上载的文件名,检查将失败。您需要使用Callback来访问该对象。

->add('terms', FileType::class, [
'constraints'   => [
new Callback(function ($object, ExecutionContextInterface $context, $payload) {
$pattern = '/^([a-z]+-)+20d{6}.pdf$/';
if (!preg_match($pattern, $object->getClientOriginalName())) {
$context->buildViolation('Change the name of the file')
->addViolation();
}
}),
new File([
'mimeTypes' => [
"application/pdf",
"application/x-pdf",
],
]),
])

相关内容

  • 没有找到相关文章

最新更新