У меня есть форма, настроенная в меню администратора, которая позволяет человеку загружать файл, например изображение. Затем этот файл используется в пользовательском модуле в другом месте. Я хочу иметь возможность заменить этот файл, если они загрузят его снова. Я верю, что могу использовать 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);
}
}