logEntryRepository ->createQueryBuilder('log_entry') ; $pagination = $this->paginator->paginate( $qb, $request->query->getInt('page', 1), $request->query->getInt('limit', 50), [ 'defaultSortFieldName' => 'log_entry.createdAt', 'defaultSortDirection' => 'DESC', ] ); return $this->render('admin/log/index.html.twig', [ 'pagination' => $pagination, ]); } #[Route('/admin/log/{id}/xml-dumps', name: 'app_admin_log_xmldumps')] public function xmlDumps(LogEntry $logEntry): Response { $dumps = []; try { $dumps = $this->xmlDumpReader->findDumpsForRequestId($logEntry->getRequestId()); } catch (FilesystemException) { } return $this->render('admin/log/xml_dumps.html.twig', [ 'logEntry' => $logEntry, 'dumps' => $dumps, ]); } #[Route('/admin/log/download/{filename}', name: 'app_admin_log_xmldump_download', requirements: ['filename' => '.+'])] public function downloadXmlDump(string $filename): Response { try { if (false === $this->xmlDumpReader->fileExists($filename)) { throw $this->createNotFoundException('Dump file not found. It may have been cleaned up.'); } $content = $this->xmlDumpReader->getContent($filename); } catch (FilesystemException $e) { throw $this->createNotFoundException('Failed to read dump file: '.$e->getMessage()); } $response = new Response($content); $response->headers->set('Content-Type', 'application/xml'); $disposition = $response->headers->makeDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, basename($filename) ); $response->headers->set('Content-Disposition', $disposition); return $response; } }