<?php
declare(strict_types=1);
namespace App\Controller\Content\App;
use Doctrine\ORM\UnexpectedResultException;
use App\Entity\Content\Document;
use App\Entity\Content\DocumentCategory;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* ProductDocument controller.
*
* @Route("/{_locale}/document", requirements={"_locale": "\w{2}"})
*/
class DocumentController extends AbstractController
{
/**
* Lists all document entities.
*
* @Route("/", name="app_document_index", methods={"GET"})
*
* @return Response
*/
public function indexAction(
Request $request,
PaginatorInterface $paginator
): Response {
$repo = $this->getDoctrine()->getRepository(Document::class);
return $this->render('Content/Public/Document/index.html.twig', [
'documents' => $paginator->paginate(
$repo->createByCategoryQueryBuilder($request->get("category")),
(int) $request->get('page', 1),
(int) $request->get('itemsPerPage', 8)
),
'document_categories' => $this
->getDoctrine()
->getRepository(DocumentCategory::class)
->findAll()
]);
}
/**
* Lists all document entities.
*
* @Route("/widget", name="app_document_widget")
*
* @Cache(expires="+2 days", public=true)
*
* @param PaginatorInterface $paginator
*
* @return array|Response
*/
public function widgetAction(PaginatorInterface $paginator)
{
$categorySlug = $this->get('request_stack')->getMasterRequest()->get('category', null);
$page = (int) $this->get('request_stack')->getMasterRequest()->get('page', 1);
$category = null;
if (!empty($categorySlug)) {
try {
/** @var DocumentCategory $category */
$category = $this->getDoctrine()
->getRepository(DocumentCategory::class)
->findOneBySlug($categorySlug)
->getName();
} catch (UnexpectedResultException $e) {
}
}
$this->get('session')->set('subtitle', $category);
return $this->render('Content/Public/Document/widget.html.twig', [
'documents' => $paginator->paginate(
$this->getDoctrine()
->getRepository(Document::class)
->createByCategoryQueryBuilder($categorySlug),
$page
),
'document_categories' => $this
->getDoctrine()
->getRepository(DocumentCategory::class)
->findAll()
]);
}
}