ฉันกำลังพยายามสร้างที่เก็บถาวรของไฟล์บันทึกเพื่อให้สามารถดาวน์โหลดได้ในรูปแบบที่สร้างโมดูลที่กำหนดเองใน Drupal 9
ในแบบฟอร์ม ผู้ใช้สามารถเปลี่ยนรูปแบบของไฟล์เก็บถาวร ตามภาพ:
ด้านล่างรหัสของฉัน:
ดาวน์โหลดฟังก์ชั่นส่วนตัว ($form, $form_state) {
$format = $form_state->getValue('รูปแบบ');
$folder = $form_state->getValue('โฟลเดอร์');
$date = วันที่และเวลาใหม่ ();
$date = $date->format("y_m_d_H_i_s");
$logsDirectory = \Drupal::service('file_system')
->realpath($folder . "://logs/");
//ดึงไฟล์ทั้งหมดในโฟลเดอร์
$logs = glob($logsDirectory . "/*.log");
$archiveName = $วันที่ รูปแบบ $;
$archive_path = \Drupal::service('file_system')
->saveData('', 'ชั่วคราว://' . $archiveName);
$archive = \Drupal::service('plugin.manager.archiver')
->getInstance(['filepath' => $archive_path]);
foreach ($ บันทึกเป็น $log) {
$archive->add($log);
}
$response = ใหม่ BinaryFileResponse($archive_path);
$response->headers->set('ประเภทเนื้อหา', $this->getContentTypes($format));
$response->headers->set('Content-Disposition', 'attachment;filename="' . $archive_path . '"');
$form_state->setResponse($ตอบกลับ);
}
ทุกอย่างเป็นไปได้ด้วยดีฉันจัดการเพื่อให้ได้ปุ่มด้วยวิธีนี้ซึ่งเมื่อกดแล้วจะดาวน์โหลดไฟล์เก็บถาวรที่มีไฟล์บันทึกทั้งหมดอยู่ข้างใน
ปัญหาคือภายในไฟล์ zip นี้ไฟล์ทั้งหมดอยู่ในเส้นทางที่แน่นอนด้วยวิธีนี้:
นี่เป็นเพราะใน ArchiveInterface Class เพิ่ม วิธีการยอมรับเพียงหนึ่งพารามิเตอร์ $file_path
และไม่สนับสนุนการเพิ่มพารามิเตอร์ตัวที่สองเพื่อระบุชื่อไฟล์
ฉันจะแก้ปัญหานี้ได้อย่างไร โดยการเพิ่มภายในไฟล์เก็บถาวรเฉพาะไฟล์และไม่ใช่โฟลเดอร์ย่อยทั้งหมด