src/Controller/HomeController.php line 79

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\Entity\Card;
  5. use App\Entity\Collection;
  6. use App\Entity\User;
  7. use App\Repository\UserRepository;
  8. use Cocur\Slugify\Slugify;
  9. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  10. use Knp\Snappy\Pdf;
  11. use League\Csv\Writer;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\StreamedResponse;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class HomeController extends AbstractController
  17. {
  18.     #[Route(path'/download-user-data'name'download_user_data')]
  19.     public function downloadUserData(UserRepository $userRepository)
  20.     {
  21.         /** @var User $user */
  22.         $user $this->getUser();
  23.         $response = new JsonResponse($userRepository->exportUser($user));
  24.         $response->setEncodingOptions($response->getEncodingOptions() | JSON_PRETTY_PRINT);
  25.         $response->setSharedMaxAge(60 10);
  26.         $response->headers->set('Content-Disposition''attachment; filename="cortex_user_data.json"');
  27.         return $response;
  28.     }
  29.     #[Route(path'/export-collection/csv/{collection}'name'export_collection_csv')]
  30.     public function exportCollectionCsv(Collection $collection)
  31.     {
  32.         $csv Writer::createFromFileObject(new \SplTempFileObject());
  33.         foreach ($collection->getCards() as $card) {
  34.             $csv->insertOne([
  35.                 $card->getFrontText(),
  36.                 $card->getBackText(),
  37.             ]);
  38.         }
  39.         $response = new StreamedResponse();
  40.         $response->setCallback(fn() => print($csv->getContent()));
  41.         $response->headers->set('Content-Type''text/csv; charset=utf-8');
  42.         $response->headers->set(
  43.             'Content-Disposition',
  44.             'attachment; filename="' $collection->getTitle() . '.csv"'
  45.         );
  46.         return $response;
  47.     }
  48.     #[Route(path'/export-collection/pdf/{collection}'name'export_collection_pdf')]
  49.     public function exportCollectionPdf(Collection $collectionPdf $snappy)
  50.     {
  51.         $slugify = new Slugify();
  52.         return new PdfResponse(
  53.             $snappy->getOutputFromHtml(
  54.                 $this->renderView('collection/export-pdf.html.twig', ['collection' => $collection])
  55.             ),
  56.             $slugify->slugify($collection->getTitle()) . '.pdf'
  57.         );
  58.     }
  59.     // page d'accueil (serve votre app React/Twig pour route '/')
  60.     #[Route(path'/'name'home')]
  61.     // catch-all pour le front React, excluant login, logout, api, admin, _wdt, _profiler
  62.     #[Route(
  63.         path'/{reactRouting}',
  64.         name'react_routing',
  65.         defaults: ['reactRouting' => null],
  66.         requirements: ['reactRouting' => '^(?!(login|logout|api|admin|_wdt|_profiler)).+']
  67.     )]
  68.     public function index()
  69.     {
  70.         return $this->render('home/index.html.twig', [
  71.             'controller_name' => 'HomeController',
  72.         ]);
  73.     }
  74. }