<?php
|
declare(strict_types=1);
|
|
namespace App\Controller;
|
|
use App\Form\BookSearchType;
|
use App\Model\BookSearch;
|
use App\Repository\BookRepository;
|
use Knp\Component\Pager\PaginatorInterface;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\Routing\Attribute\Route;
|
|
class SearchController extends AbstractController {
|
#[Route('/search', name: 'search', methods: ['GET'])]
|
public function search(Request $request, BookRepository $books, PaginatorInterface $paginator): Response {
|
$search = new BookSearch();
|
$form = $this->createForm(BookSearchType::class, $search);
|
$form->handleRequest($request);
|
|
$quickQuery = trim($request->query->getString('q'));
|
$builder = match (true) {
|
'' !== $quickQuery => $books->createQuickSearchQueryBuilder($quickQuery),
|
!$search->isEmpty() => $books->createSearchQueryBuilder($search),
|
default => null,
|
};
|
|
return $this->render('search/index.html.twig', [
|
'form' => $form,
|
'pagination' => $builder ? $paginator->paginate($builder, max(1, $request->query->getInt('page', 1))) : null,
|
]);
|
}
|
}
|