Tôi đang cố gắng tạo một kho lưu trữ tệp nhật ký có thể tải xuống ở dạng tạo mô-đun tùy chỉnh trong Drupal 9.
Trong biểu mẫu, người dùng có thể thay đổi định dạng của kho lưu trữ, theo hình ảnh:
Ở đây bên dưới mã của tôi:
tải xuống chức năng riêng ($form, $form_state) {
$format = $form_state->getValue('format');
$folder = $form_state->getValue('folders');
$date = new DateTime();
$date = $date->format("y_m_d_H_i_s");
$logsDirectory = \Drupal::service('file_system')
->realpath($folder . "://logs/");
// Lấy tất cả các tệp trong thư mục.
$logs = toàn cầu($logsDirectory ."/*.log");
$archiveName = $date . định dạng $;
$archive_path = \Drupal::service('file_system')
->saveData('', 'temporary://' . $archiveName);
$archive = \Drupal::service('plugin.manager.archiver')
->getInstance(['filepath' => $archive_path]);
foreach ($log dưới dạng $log) {
$archive->add($log);
}
$response = new BinaryFileResponse($archive_path);
$response->headers->set('Content-type', $this->getContentTypes($format));
$response->headers->set('Content-Disposition', 'attachment;filename="' . $archive_path . '"');
$form_state->setResponse($response);
}
Mọi thứ đều ổn, tôi đã cố gắng đạt được một nút theo cách này, khi được nhấn, sẽ tải xuống kho lưu trữ với tất cả các tệp nhật ký bên trong.
Vấn đề là bên trong zip này, tất cả các tệp đều nằm trong đường dẫn tuyệt đối của chúng, theo cách này:
Điều này là do trong Lớp ArchiveInterface, cộng phương pháp chỉ chấp nhận một tham số, $file_path
và không hỗ trợ thêm tham số thứ hai để chỉ định tên của tệp.
Làm cách nào tôi có thể giải quyết vấn đề này, chỉ có thể thêm vào bên trong kho lưu trữ các tệp chứ không phải tất cả các thư mục con?