src/Controller/Frontend/BlogController.php line 80

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of Symfony Keen Template Project.
  4.  * (c) 2021 One AM SRL
  5.  */
  6. namespace App\Controller\Frontend;
  7. use App\Entity\Article;
  8. use App\Entity\Category;
  9. use App\Repository\ArticleRepository;
  10. use App\Repository\CategoryRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Keen\Annotation\NavbarTag;
  13. use Keen\Attribute\Breadcrumb;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. /** @NavbarTag("blog") */
  20. #[Route('/blog'name'frontend_blog')]
  21. #[Breadcrumb('Blog')]
  22. class BlogController extends AbstractController
  23. {
  24.     #[Route('/{slug}'name''defaults: ['slug' => null], methods: ['GET'])]
  25.     public function list(
  26.         ?string $slug,
  27.         ArticleRepository $articleRepository,
  28.         CategoryRepository $categoryRepository,
  29.         PaginatorInterface $paginator,
  30.         Request $request,
  31.         EntityManagerInterface $entityManager
  32.     ): Response {
  33.         $category null;
  34.         if (null !== $slug && null === $category $entityManager->getRepository(Category::class)->findOneBy(['slug' => $slug])) {
  35.             throw $this->createNotFoundException();
  36.         }
  37.         $featuredArticle $articleRepository->createQueryBuilder('article')
  38.             ->andWhere('article.visible = true')
  39.             ->andWhere('article.featured = true')
  40.             ->orderBy('article.date''DESC')
  41.             ->setMaxResults(1)
  42.             ->getQuery()->getOneOrNullResult();
  43.         $qb $articleRepository->createQueryBuilder('article')
  44.             ->andWhere('article.visible = true')
  45.             ->andWhere('article.featured = false')
  46.         ;
  47.         if (null !== $category) {
  48.             $qb->andWhere(':category MEMBER OF article.categories')
  49.                 ->setParameter('category'$category);
  50.         }
  51.         
  52.         $pagination $paginator->paginate(
  53.             $qb,
  54.             max(1$request->query->get('page'1)),
  55.             min($request->query->get('perPage'9), 9),
  56.             [
  57.                 'sortFieldParameterName' => 'date',
  58.                 'sortDirectionParameterName' => 'desc'
  59.             ]
  60.         );
  61.         return $this->render('frontend/blog/list.html.twig', [
  62.             'featuredArticle' => $featuredArticle,
  63.             'categories' => $categoryRepository->findAll(),
  64.             'pagination' => $pagination,
  65.             'category' => $category,
  66.         ]);
  67.     }
  68.     #[Route('/articolo/{slug}'name'_article_read'methods: ['GET'])]
  69.     #[Route('/{category}/{slug}'methods: ['GET'])]
  70.     public function read(string $slugEntityManagerInterface $entityManager, ?string $category null): Response
  71.     {
  72.         if (null === $articleObject $entityManager->getRepository(Article::class)->findOneBy(['slug' => $slug])) {
  73.             throw $this->createNotFoundException();
  74.         }
  75.         $relatedArticles $entityManager->getRepository(Article::class)
  76.             ->createQueryBuilder('article')
  77.             ->andWhere('article.id != :article')
  78.             ->setParameter('article'$articleObject->getId())
  79.             ->setMaxResults(4)
  80.             ->orderBy('article.date''DESC')
  81.             ->getQuery()->getResult();
  82.         return $this->render('frontend/blog/article.html.twig', [
  83.             'article' => $articleObject,
  84.             'relatedArticles' => $relatedArticles,
  85.         ]);
  86.     }
  87. }