src/Controller/NewsController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\News;
  4. use App\Repository\HeaderRepository;
  5. use App\Repository\NewsRepository;
  6. use App\Repository\SectionTitleRepository;
  7. use App\Repository\TitlesRepository;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use Psr\Cache\InvalidArgumentException;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Cache\CacheInterface;
  16. use Symfony\Contracts\Cache\ItemInterface;
  17. class NewsController extends AbstractController
  18. {
  19.     /**
  20.      * @Route({
  21.      *     "fr": "/fr/nos-actualités",
  22.      *     "en": "/en/our-news"
  23.      * }, name="app_news_index")
  24.      */
  25.     public function index(TitlesRepository $titleRepository, NewsRepository $newsRepository, PaginatorInterface $paginator, Request $request, HeaderRepository $headerRepository): Response
  26.     {
  27.         $news = $newsRepository->findAll();
  28. //        $popular = $newsRepository->findByIsPopular(1);
  29.         $newsIndex = $titleRepository->findTitleByTag('news_index');
  30.         $articles = $paginator->paginate(
  31.             $news, // Requête contenante les données à paginer (ici nos articles)
  32.             $request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  33.             8 // Nombre de résultats par page
  34.         );
  35.         return $this->render('news/index.html.twig', [
  36.             'newsTitle' => $newsIndex,
  37.             'news' => $articles,
  38. //            'popularNews' => $popular,
  39.             'newss' => $news
  40.         ]);
  41.     }
  42.     /**
  43.      * @Route("/{_locale<%app.supported_locales%>}/actualites/{slug}", name="app_news_details", requirements={"slug": "[a-z0-9\-]*"})
  44.      * @param $slug
  45.      * @param NewsRepository $newsRepository
  46.      * @param CacheInterface $cache
  47.      * @return Response
  48.      * @throws InvalidArgumentException
  49.      */
  50.     public function newsDetails($slug, NewsRepository $newsRepository, CacheInterface $cache): Response
  51.     {
  52.         $popular = $newsRepository->findByIsActive(1);
  53.         $ispopular = $newsRepository->findByIsPopular(1);
  54.         $news = $cache->get('app_news_details' . $slug, function (ItemInterface $item) use ($newsRepository, $slug) {
  55.             $item->expiresAfter(20);
  56.             return $newsRepository->findOneBy(['slug' => $slug]);
  57.         });
  58.         if (!$news) {
  59.             throw new NotFoundHttpException('Pas d\'annonce trouvée');
  60.         }
  61.         return $this->render('news/details.html.twig', [
  62.             'news' => $news,
  63.             'popularNews' => $ispopular
  64.         ]);
  65.     }
  66. }