src/Controller/BlogController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Blog;
  4. use App\Entity\BlogTagBlog;
  5. use App\Form\BlogFilterClientType;
  6. use App\Repository\BlogRepository;
  7. use App\Service\SearchService;
  8. use App\Util\Search\MyCriteriaParam;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Knp\Component\Pager\PaginatorInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. #[Route('/blog')]
  16. class BlogController extends AbstractController
  17. {
  18. private $entityManager;
  19. private $blogRepository;
  20. public function __construct(EntityManagerInterface $entityManager, BlogRepository $blogRepository)
  21. {
  22. $this->entityManager = $entityManager;
  23. $this->blogRepository = $blogRepository;
  24. }
  25. #[Route('/', name: 'app_blog_index')]
  26. public function index(Request $request, PaginatorInterface $paginator, SearchService $searchService): Response
  27. {
  28. $error = null;
  29. $page = $request->query->get('page', 1);
  30. $limit = 9;
  31. $criteria = [
  32. ['prop' => 'categorie.id', 'col' => 'id', 'alias' => 'c'],
  33. ['prop' => 'search', 'col' => "concat(concat(coalesce(b.description, ''), ' '), b.titre)", 'alias' => null, 'op' => 'LIKE']
  34. ];
  35. $filter = [];
  36. $form = $this->createForm(BlogFilterClientType::class, $filter, [
  37. 'method' => 'GET'
  38. ]);
  39. $form->handleRequest($request);
  40. $filter = $form->getData();
  41. $qb = $this->entityManager
  42. ->createQueryBuilder();
  43. $query = $qb
  44. ->select('b')
  45. ->from(Blog::class, 'b')
  46. ->join('b.categorie', 'c')
  47. ->join('b.auteur', 'a')
  48. ;
  49. $where = $searchService->getWhere($filter, new MyCriteriaParam($criteria, 'b'));
  50. $query->andwhere($where["where"]." and b.statut != 0 ");
  51. if(isset($filter['tags']) && count($filter['tags']) > 0){
  52. $tagIdArray = BlogTagBlog::generateTagIdArray($filter['tags']);
  53. $sqb = $this->entityManager
  54. ->createQueryBuilder();
  55. $query->andWhere(
  56. $qb->expr()->exists(
  57. $sqb->select('bt2')
  58. ->from(BlogTagBlog::class, 'bt2')
  59. ->join('bt2.tag', 't2')
  60. ->join('bt2.blog', 'b2')
  61. ->andWhere('b2.id = b.id')
  62. ->andWhere('bt2.statut != 0')
  63. ->andWhere($sqb->expr()->in('t2.id', $tagIdArray))
  64. )
  65. );
  66. }
  67. $searchService->setAllParameters($query, $where["params"]);
  68. $searchService->addOrderBy($query, $filter, ['sort' => 'b.datePublication', 'direction' => 'desc']);
  69. $blogList = $paginator->paginate(
  70. $query,
  71. $page,
  72. $limit
  73. );
  74. // $recentBlog = $this->blogRepository->getRecentBlog(3);
  75. return $this->render('blog/blog.html.twig', [
  76. 'error' => $error,
  77. 'blogList' => $blogList,
  78. 'form' => $form->createView(),
  79. // 'recentBlog' => $recentBlog
  80. ]);
  81. }
  82. #[Route('/{slugCat}/{slugTitle}/{id}', name: 'app_blog_details')]
  83. public function details(Blog $blog, Request $request): Response
  84. {
  85. $error = null;
  86. $form = $this->createForm(BlogFilterClientType::class, null, [
  87. 'method' => 'GET'
  88. ]);
  89. $recentBlog = $this->blogRepository->getRecentBlog(5);
  90. $relatedBlog = $this->blogRepository->getRelatedBlog(3, $blog->getId());
  91. return $this->render('blog/blog-details.html.twig', [
  92. 'error' => $error,
  93. 'blog' => $blog,
  94. 'form' => $form->createView(),
  95. 'recentBlog' => $recentBlog,
  96. 'relatedBlog' => $relatedBlog
  97. ]);
  98. }
  99. }