Jacek Kowalski
4 hours ago 6b9278a5d57091fce636dbb640b380cfb990db6c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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,
        ]);
    }
}