You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal表单文件上传必填校验异常问题求助

Drupal文件上传表单必填验证失败问题解决

问题现象

表单上传文件并提交后,系统提示文件字段为必填项,但明明已经选择了文件。移除文件字段的#required => TRUE后,表单能正常提交。

问题原因

你的表单中params元素设置了#tree = TRUE(树状结构),但文件上传字段手动指定了#name = 'files[attachment]',这和树状结构下的字段命名规则不匹配。Drupal的表单验证逻辑会根据字段的层级结构查找提交的值,手动设置的#name破坏了这个结构,导致验证阶段找不到上传的文件数据,进而触发必填错误。

解决方案

1. 修正文件字段的#name设置

移除attachments字段中的手动#name属性,让Drupal自动生成符合树状结构的name:

'attachments' => [
  '#type' => 'file',
  '#title' => $this->t('Choose a file to send for translation.'),
  '#required' => TRUE,
],

2. 调整验证方法中的文件获取逻辑

在validateForm方法中,使用正确的字段键来获取上传文件,对应树状结构的params[attachments]:

$file = file_save_upload('params[attachments]', ['file_validate_extensions' => ['doc docx pdf']], 'temporary://', 0);
if ($file) {
  $form_state->setValue(['params', 'attachments'], [['filepath' => $file->getFileUri()]]);
}
// 手动触发错误提示,确保必填验证逻辑生效
else {
  $form_state->setErrorByName('params][attachments', $this->t('Please upload a valid file.'));
}

3. 额外检查(可选)

确认表单的enctype属性为multipart/form-data,Drupal的file类型字段会自动添加该属性,但如果有自定义渲染逻辑,需要确保该属性存在。

修改后,表单的树状结构和文件上传的命名规则一致,验证阶段就能正确识别已上传的文件,同时保留必填验证的功能。

内容的提问来源于stack exchange,提问作者sp2012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:01:37