getFileResponse( $this->renderFile($exportItems, $query), (new ExportFilename($query))->getFilename() . '.csv', 'text/csv' ); } /** * @param ExportableItem[] $exportItems */ public function renderFile(array $exportItems, TimesheetQuery $query): \SplFileInfo { $filename = @tempnam(sys_get_temp_dir(), 'kimai-export-csv'); if (false === $filename) { throw new \Exception('Could not open temporary file'); } $options = new Options(); $options->SHOULD_ADD_BOM = false; $spreadsheet = new SpoutSpreadsheet(new Writer($options)); $spreadsheet->open($filename); $this->spreadsheetRenderer->registerFormatter('date', new DateStringFormatter()); $this->spreadsheetRenderer->writeSpreadsheet($spreadsheet, $exportItems, $query); return new \SplFileInfo($filename); } }