src/Controller/NewsController.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Dto\PageSearchDto;
  4. use App\Entity\Page;
  5. use App\Entity\PageTemplate;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. /**
  12.  * @Route("/news")
  13.  */
  14. class NewsController extends AbstractController
  15. {
  16.     const PER_PAGE 3;
  17.     /**
  18.      * @Route("/", name="news.index")
  19.      */
  20.     public function index(): Response
  21.     {
  22.         $searchDto $this->getSearchDto();
  23.         $pageRep $this->getDoctrine()->getRepository(Page::class);
  24.         return $this->render('news/index.html.twig', [
  25.             'news'      => $pageRep->search($searchDto),
  26.             'newsCount' => $pageRep->searchCount($searchDto),
  27.         ]);
  28.     }
  29.     /**
  30.      * @Route("/more", name="news.more")
  31.      */
  32.     public function news(Request $request): JsonResponse
  33.     {
  34.         $searchDto $this->getSearchDto()->setPage((int)$request->get('page'));
  35.         $pageRep $this->getDoctrine()->getRepository(Page::class);
  36.         return $this->json([
  37.             'data' => $this->renderView('news/_items.html.twig', [
  38.                 'news' => $pageRep->search($searchDto),
  39.             ]),
  40.             'left' => $pageRep->searchCount($searchDto) - $searchDto->getPage() * $searchDto->getPerPage(),
  41.         ]);
  42.     }
  43.     protected function getSearchDto(): PageSearchDto
  44.     {
  45.         return (new PageSearchDto(''))
  46.             ->setPerPage(self::PER_PAGE)
  47.             ->setTemplate($this->getDoctrine()->getRepository(PageTemplate::class)->findOneBy(['path' => 'page/news_page.html.twig']));
  48.     }
  49. }