Я пытаюсь создать архив файлов журналов, которые можно загрузить в форме, создающей собственный модуль в Drupal 9.
В форме пользователь может изменить формат архива, как показано на изображении:
Здесь ниже моего кода:
загрузка частной функции ($ form, $ form_state) {
$format = $form_state->getValue('format');
$folder = $form_state->getValue('папки');
$дата = новый DateTime();
$date = $date->format("y_m_d_H_i_s");
$logsDirectory = \Drupal::service('file_system')
->realpath($folder . "://logs/");
//Получить все файлы в папке.
$logs = glob($logsDirectory . "/*.log");
$имя_архива = $дата. $формат;
$archive_path = \Drupal::service('file_system')
->saveData('', 'temporary://' . $archiveName);
$archive = \Drupal::service('plugin.manager.archiver')
->getInstance(['filepath' => $archive_path]);
foreach ($ logs как $ log) {
$архив->добавить($журнал);
}
$response = новый BinaryFileResponse($archive_path);
$response->headers->set('Content-type', $this->getContentTypes($format));
$response->headers->set('Content-Disposition', 'attachment;filename="' . $archive_path . '"');
$form_state->setResponse($response);
}
Все идет нормально, удалось таким образом добиться кнопки, которая при нажатии скачивает архив со всеми лог-файлами внутри.
Проблема в том, что внутри этого zip все файлы находятся внутри своего абсолютного пути, таким образом:
Это связано с тем, что в классе ArchiveInterface Добавлять метод принимает только один параметр, $file_path
, и добавление второго параметра для указания имени файлов не поддерживается.
Как я мог решить эту проблему, имея возможность добавлять в архив только файлы, а не все подпапки?