Рейтинг:0

Использование FileSystemInterface::EXISTS_REPLACE в форме для замены файлов, если они уже существуют

флаг cn

У меня есть форма, настроенная в меню администратора, которая позволяет человеку загружать файл, например изображение. Затем этот файл используется в пользовательском модуле в другом месте. Я хочу иметь возможность заменить этот файл, если они загрузят его снова. Я верю, что могу использовать FileSystemInterface::EXISTS_REPLACE в форме, чтобы сделать это, но я не могу найти документацию о том, как именно. Есть ли примеры реализации этого? Пожалуйста, дайте мне знать, если вы хотите увидеть форму или любой другой код, но я не думаю, что это необходимо. Спасибо!

Редактировать, я видел документацию за прошлый год, в которой говорилось, что невозможно заменить загруженные файлы файлами с таким же именем. Мне интересно, верно ли это по состоянию на апрель 2022 года.

Вот куда загружается изображение в форме:

 $form['upload']['sound_dir'] = [
  '#type' => 'managed_file',
  '#upload_location' => 'public://',
  '#required' => ЛОЖЬ,
  '#несколько' => ЛОЖЬ,
  '#description' => t('Разрешенные расширения: mp3 wav'),
  '#upload_validators' => [
    'file_validate_extensions' => массив ('mp3 wav'),
    'file_validate_size' => массив (25600000)
  ],
  '#title' => t('Загрузить звуковой файл:')
  ];

И отправить:

  публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {
    $file_data = $form_state->getValue(['upload' => 'sound_dir']);
    если ($file_data != ноль) {
      $file = \Drupal\file\Entity\File::load( $file_data[0], );
      $file_name = $file->getFilename();
      $uri = $file->getFileUri();
      $url = \Drupal\Core\Url::fromUri(file_create_url($uri))->toString();
      $файл->setPermanent();
      $файл->сохранить();

      $this->configFactory->getEditable(static::SETTINGS)
      ->set('pathToSound', $url)
      -> сохранить();
      родитель::submitForm($form, $form_state);
    }
  }
No Sssweat avatar
флаг ua
Вот пример патча D9 https://www.drupal.org/files/issues/2020-02-21/deprecated_code-3115151-3.patch

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.