ฉันมีแบบฟอร์มที่ตั้งค่าไว้ในเมนูผู้ดูแลระบบที่อนุญาตให้บุคคลอัปโหลดไฟล์ เช่น รูปภาพ ไฟล์นั้นจะถูกใช้ในโมดูลแบบกำหนดเองที่อื่น ฉันต้องการแทนที่ไฟล์นั้นหากพวกเขาอัปโหลดอีกครั้ง ฉันเชื่อว่าฉันสามารถใช้ FileSystemInterface::EXISTS_REPLACE
ในแบบฟอร์มให้ดำเนินการ แต่ฉันไม่พบเอกสารเกี่ยวกับวิธีการที่แน่นอน มีตัวอย่างของการดำเนินการนี้หรือไม่? โปรดแจ้งให้เราทราบหากคุณต้องการดูแบบฟอร์มหรือรหัสอื่นๆ แต่เราคิดว่ามันไม่จำเป็น ขอบคุณ!
แก้ไข ฉันเห็นเอกสารบางส่วนจากปีที่แล้วที่บอกว่าไม่สามารถแทนที่ไฟล์ที่อัปโหลดด้วยชื่อเดียวกันได้ ฉันสงสัยว่าสิ่งนี้ยังคงเป็นจริงหรือไม่ ณ เดือนเมษายน 2022
นี่คือตำแหน่งที่อัปโหลดรูปภาพในแบบฟอร์ม:
$form['upload']['sound_dir'] = [
'#type' => 'managed_file',
'#upload_location' => 'สาธารณะ://',
'#required' => เท็จ
'#multiple' => เท็จ
'#description' => t('นามสกุลที่อนุญาต: mp3 wav'),
'#upload_validators' => [
'file_validate_extensions' => อาร์เรย์('mp3 wav'),
'file_validate_size' => อาร์เรย์(25600000)
]
'#title' => t('อัปโหลดไฟล์เสียง:')
];
และส่ง:
ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
$file_data = $form_state->getValue(['upload' => 'sound_dir']);
ถ้า ($file_data != null) {
$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();
$file->setPermanent();
$file->save();
$this->configFactory->getEditable(คงที่::SETTINGS)
->set('pathToSound', $url)
->บันทึก();
parent::submitForm($form, $form_state);
}
}