previewExporter->rows(); } catch (StaffingConfigurationException $e) { $this->addFlash('error', 'Ein Jobprofil oder Honorar der Besetzungsmatrix ist nicht (mehr) vorhanden: '.$e->getMessage()); return $this->redirectToRoute('app_administrative_system_staffing_rule_index'); } if ([] === $rows) { $this->addFlash('error', 'Keine Daten für den Export vorhanden'); return $this->redirectToRoute('app_administrative_system_staffing_rule_preview'); } $spreadsheet = $this->previewExporter->export($rows); $filename = sprintf('besetzungsmatrix-vorschau_%s.xlsx', date('YmdHi')); $response = new StreamedResponse(static function () use ($spreadsheet): void { (new Xlsx($spreadsheet))->save('php://output'); }); $response->headers->set( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ); $response->headers->set( 'Content-Disposition', HeaderUtils::makeDisposition(HeaderUtils::DISPOSITION_ATTACHMENT, $filename, md5($filename)) ); $this->logger->info('Export staffing preview', [ 'count' => count($rows), ]); return $response; } }