这是我在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
。
但是,由于terms
是UploadedFile
,其__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",
],
]),
])