<?php
namespace App\Controller;
use App\Dto\PageSearchDto;
use App\Entity\Page;
use App\Entity\PageTemplate;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/news")
*/
class NewsController extends AbstractController
{
const PER_PAGE = 3;
/**
* @Route("/", name="news.index")
*/
public function index(): Response
{
$searchDto = $this->getSearchDto();
$pageRep = $this->getDoctrine()->getRepository(Page::class);
return $this->render('news/index.html.twig', [
'news' => $pageRep->search($searchDto),
'newsCount' => $pageRep->searchCount($searchDto),
]);
}
/**
* @Route("/more", name="news.more")
*/
public function news(Request $request): JsonResponse
{
$searchDto = $this->getSearchDto()->setPage((int)$request->get('page'));
$pageRep = $this->getDoctrine()->getRepository(Page::class);
return $this->json([
'data' => $this->renderView('news/_items.html.twig', [
'news' => $pageRep->search($searchDto),
]),
'left' => $pageRep->searchCount($searchDto) - $searchDto->getPage() * $searchDto->getPerPage(),
]);
}
protected function getSearchDto(): PageSearchDto
{
return (new PageSearchDto(''))
->setPerPage(self::PER_PAGE)
->setTemplate($this->getDoctrine()->getRepository(PageTemplate::class)->findOneBy(['path' => 'page/news_page.html.twig']));
}
}