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.     
  21.     public function __construct(EntityManagerInterface $entityManagerBlogRepository $blogRepository)
  22.     {
  23.         $this->entityManager $entityManager;
  24.         $this->blogRepository $blogRepository;
  25.     }
  26.     #[Route('/'name'app_blog_index')]
  27.     public function index(Request $requestPaginatorInterface $paginatorSearchService $searchService): Response
  28.     {
  29.         $error null;
  30.         $page $request->query->get('page'1);
  31.         $limit 9;
  32.         $criteria = [
  33.             ['prop' => 'categorie.id''col' => 'id''alias' => 'c'],
  34.             ['prop' => 'search''col' => "concat(concat(coalesce(b.description, ''), ' '), b.titre)"'alias' => null'op' => 'LIKE']
  35.         ];
  36.         $filter = [];
  37.         
  38.         $form $this->createForm(BlogFilterClientType::class, $filter, [
  39.             'method' => 'GET'
  40.         ]);
  41.         $form->handleRequest($request);
  42.         $filter $form->getData();
  43.         $qb $this->entityManager
  44.             ->createQueryBuilder();
  45.         
  46.         $query $qb
  47.             ->select('b')
  48.             ->from(Blog::class, 'b')
  49.             ->join('b.categorie''c')
  50.             ->join('b.auteur''a')
  51.         ;  
  52.         $where =  $searchService->getWhere($filter, new MyCriteriaParam($criteria'b'));   
  53.         $query->andwhere($where["where"]." and b.statut != 0 ");
  54.         if(isset($filter['tags']) && count($filter['tags']) > 0){
  55.             $tagIdArray BlogTagBlog::generateTagIdArray($filter['tags']);
  56.             $sqb =  $this->entityManager
  57.             ->createQueryBuilder();
  58.             $query->andWhere(
  59.                 $qb->expr()->exists(
  60.                     $sqb->select('bt2')
  61.                     ->from(BlogTagBlog::class, 'bt2')
  62.                     ->join('bt2.tag''t2')
  63.                     ->join('bt2.blog''b2')
  64.                     ->andWhere('b2.id = b.id')
  65.                     ->andWhere('bt2.statut != 0')
  66.                     ->andWhere($sqb->expr()->in('t2.id'$tagIdArray))
  67.                 )
  68.             );
  69.         }
  70.         
  71.         $searchService->setAllParameters($query$where["params"]);
  72.         $searchService->addOrderBy($query$filter, ['sort' => 'b.datePublication''direction' => 'desc']);
  73.         $blogList $paginator->paginate(
  74.             $query,
  75.             $page,
  76.             $limit
  77.         );
  78.         // $recentBlog = $this->blogRepository->getRecentBlog(3);
  79.         return $this->render('blog/blog.html.twig', [
  80.             'error' => $error,
  81.             'blogList' => $blogList,
  82.             'form' => $form->createView(),
  83.             // 'recentBlog' => $recentBlog
  84.         ]);
  85.     }
  86.     #[Route('/{slugCat}/{slugTitle}/{id}'name'app_blog_details')]
  87.     public function details(Blog $blogRequest $request): Response
  88.     {
  89.         $error null;
  90.         $form $this->createForm(BlogFilterClientType::class, null, [
  91.             'method' => 'GET'
  92.         ]);
  93.         
  94.         $recentBlog $this->blogRepository->getRecentBlog(5);
  95.         $relatedBlog $this->blogRepository->getRelatedBlog(3$blog->getId());
  96.         return $this->render('blog/blog-details.html.twig', [
  97.             'error' => $error,
  98.             'blog' => $blog,
  99.             'form' => $form->createView(),
  100.             'recentBlog' => $recentBlog,
  101.             'relatedBlog' => $relatedBlog
  102.         ]);
  103.     }
  104. }