<?php
namespace App\Controller;
use App\Entity\News;
use App\Repository\HeaderRepository;
use App\Repository\NewsRepository;
use App\Repository\SectionTitleRepository;
use App\Repository\TitlesRepository;
use Knp\Component\Pager\PaginatorInterface;
use Psr\Cache\InvalidArgumentException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;
class NewsController extends AbstractController
{
/**
* @Route({
* "fr": "/fr/nos-actualités",
* "en": "/en/our-news"
* }, name="app_news_index")
*/
public function index(TitlesRepository $titleRepository, NewsRepository $newsRepository, PaginatorInterface $paginator, Request $request, HeaderRepository $headerRepository): Response
{
$news = $newsRepository->findAll();
// $popular = $newsRepository->findByIsPopular(1);
$newsIndex = $titleRepository->findTitleByTag('news_index');
$articles = $paginator->paginate(
$news, // Requête contenante les données à paginer (ici nos articles)
$request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
8 // Nombre de résultats par page
);
return $this->render('news/index.html.twig', [
'newsTitle' => $newsIndex,
'news' => $articles,
// 'popularNews' => $popular,
'newss' => $news
]);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/actualites/{slug}", name="app_news_details", requirements={"slug": "[a-z0-9\-]*"})
* @param $slug
* @param NewsRepository $newsRepository
* @param CacheInterface $cache
* @return Response
* @throws InvalidArgumentException
*/
public function newsDetails($slug, NewsRepository $newsRepository, CacheInterface $cache): Response
{
$popular = $newsRepository->findByIsActive(1);
$ispopular = $newsRepository->findByIsPopular(1);
$news = $cache->get('app_news_details' . $slug, function (ItemInterface $item) use ($newsRepository, $slug) {
$item->expiresAfter(20);
return $newsRepository->findOneBy(['slug' => $slug]);
});
if (!$news) {
throw new NotFoundHttpException('Pas d\'annonce trouvée');
}
return $this->render('news/details.html.twig', [
'news' => $news,
'popularNews' => $ispopular
]);
}
}