Drupal 8 Webform 为上传的文件名添加前缀

问题描述

我有一个带有文件上传字段的网络表单。我需要做两件事之一。要么将文件上传到私有区域内的子文件夹中,要么为用户上传文件添加前缀。用户可以上传多个文件。网络表单编辑器允许您“重命名文件并为此使用令牌,但我看不到任何保留原始文件名的方法。我可以破解 WebformManagedFileBase.PHP 中的 getFileDestinationUri() 来做我想做的事,但显然我宁愿不这样做。我错过了什么吗?

解决方法

事实证明,您可以使用 drupal form alter hook 来更改目的地。我曾想过这一点,但觉得不太可能奏效。确实如此。

以下是我的代码解决方案:(我可能缺少容器类型)

function _mymodule_fix_elements(&$elements) {
  foreach ($elements as $key => &$element) {
    if (strpos($key,'#') !== 0) {
      if (is_array($element)) {
        if (isset($element['#type'])) {
          if (($element['#type'] == 'fieldset') ||
              ($element['#type'] == 'webform_flexbox') ||
              ($element['#type'] == 'container')) {
            _mymodule_fix_elements($element);
          } else if ($element['#type'] == 'managed_file') {
            $pattern = $element['#upload_location'];
            if (strpos($pattern,'private:') === 0) {
              $element['#upload_location'] = $pattern . '/' . $key;
            }
          }
        }
      }
    }
  }
}

function mymodule_form_alter(&$form,&$form_state,$id) {
  if (strpos($id,'webform_') === 0) {
    _mymodule_fix_elements($form['elements']);
  }
}