Я работаю с фреймворком Symfony 4. Моя цель - иметь возможность экспортировать данные в различных возможных форматах ( xlsx, ods, csv, pdf ).
В моем контроллере я сделал это так:
/**
* Permet d'exporter des données.
*
* @Route("rh/export", name="rh_export")
*/
public function export(Request $request, ExportService $exportService)
{
$exportExcel = new ExportExcel();
$form = $this->createForm(ExportExcelType::class, $exportExcel);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$spreadsheet = $exportService->export($exportExcel);
switch($exportExcel->getExtension())
{
case "xlsx":
$writer = new Xlsx($spreadsheet);
break;
case "csv":
$writer = new Csv($spreadsheet);
break;
case "ods":
$writer = new Ods($spreadsheet);
break;
case "pdf":
$writer = new Dompdf($spreadsheet);
break;
default:
$writer = new Xlsx($spreadsheet);
break;
}
if($exportExcel->getExtension() === "pdf")
{
$writer->writeAllSheets();
}
// Create a Temporary file in the system
$fileName = $exportExcel->getNomFichier().'.' . $exportExcel->getExtension();
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
// Create the excel file in the tmp directory of the system
$writer->save($temp_file);
// Return the excel file as an attachment
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
return $this->render('rh/export.html.twig', [
'form' => $form->createView(),
]);
}
- Я анализирую отправку формы.
- Я создаю электронную таблицу
- В зависимости от типа требуемого файла я инициализирую $ writer
- Создать Временный файл в системе
- Создание файла Excel в каталоге системы tmp
- Возвращение файла Excel в виде вложения
Странно то, что если тип файла - .xlsx или .ods, файл загружается правильно. Однако, если это .csv или .pdf, то файл не загружается, и вместо этого он открывается в моем браузере
РЕДАКТИРОВАТЬ: я решил свою проблему с:
Заменить:
// Create a Temporary file in the system
$fileName = $exportExcel->getNomFichier().'.' . $exportExcel->getExtension();
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
// Create the excel file in the tmp directory of the system
$writer->save($temp_file);
// Return the excel file as an attachment
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
1030 *